- 为什么写这篇博文
平时在刷题的过程中遇到一些c++的新用法,学了后容易忘记。打算就在这里记录一下,方便以后看。
- stringstream用法
常用于输入带空格的字符串并且按空格分割开来,如下所示
#include <bits/stdc++.h>
using namespace std;
int main() {
//freopen("E:\\coding\\1001.txt","r",stdin);//重定向输入
stringstream ss;
string ss2,ss3;
cin>>ss3;
getchar();//cin不会处理回车键,不加这步,getline会把输入cin的回车键当作结束符
getline(cin,ss2);
ss<<ss2;
while(ss>>ss2) {
cout<<ss2<<endl;
}
return 0;
}
- 关于STL的vector
2.1 vector push_back复杂度简单分析
vector倍增因子为m,要插入n个元素。vector每一次倍增都要原先数组中的元素拷贝到新数组。
vector要拷贝 logm(n)次,第i次拷贝元素为m^i。
显然是个等比数列,最后可证得复杂度为m/(m-1)2.2 vector中erase和remove的区别
remove:它并不真正的改变vector数组的长度,只是将要删除的元素移动到数组末尾,并返回一个指向第一个要删除位置的迭代器。经常可以与erase连用。
erase:能改变vector数组的长度,是真正的删除。可以删除一个指定范围内的元素。
vector<int>vec;
for(int i=0;i<10;i++) vec.push_back(i);
vec.erase(remove(vec.begin(), vec.end(), 3), vec.end());
for(int i=0;i<vec.size();i++) cout<<vec[i]<<" ";
2.3vector 二维数组的排序
vector二维数组默认按第1列排序,当然也可以自定义按某一列排序,如下所示
vector<vector<int>>g;
int cmp(const vector<int> &a, const vector<int> &b)
{
return a[3] > b[3];
}
sort(g.begin(), g.end(), cmp);
更多用法参考博客 vector更详细用法