预留容量的两类方式:
1、不调用默认的构造函数
vector<int> v; v.push_back(111); v.reserve(20); std::copy(v.begin(), v.end(), ostream_iterator<int>(cout," "));//只能打印出111;
2、调用默认构造函数
vector<int> v(20); std::copy(v.begin(), v.end(), ostream_iterator<int>(cout," "));//打印出20个零
vector<int> v; v.resize(20); std::copy(v.begin(), v.end(), ostream_iterator<int>(cout," "));//打印出20个零
缩小vector的容量:
template<class T> void shrinkCapacity(vector<T>& v) { vector<T> temp(v); //copy elements into a new vector v.swap(temp); //swap internal vector data //swap具有常数时间复杂度,通过交换一些指针完成。 }
vector<int> v(10); v.reserve(100); cout <<"size:"<< v.size()<<"capacity:" << v.capacity() << endl; //10 100 shrinkCapacity(v); cout << "size:" << v.size() << "capacity:" << v.capacity() << endl; //10 10
将vector当作一般array使用:
只要你需要一个类型为T的数组,就可以采用vector<T>。
vector<char> c; c.resize(20); //初始化为‘ ’ strcpy(&c[0], "Hello world"); cout << &c[0] << endl;
循环语句内删除值为x的元素:
vector<int> ve; ve.push_back(1); ve.push_back(2); ve.push_back(2); ve.push_back(3); ve.push_back(4); ve.push_back(4); vector<int>::iterator iter; for (iter = ve.begin(); iter != ve.end();) { if (*iter == 4) iter = ve.erase(iter); else ++iter; } cout << "*************" << endl; copy(ve.begin(), ve.end(), ostream_iterator<int>(cout, " "));
erase返回的是下个元素的位置,内存移动后即是删除元素的位置。
insert返回的是插入元素的位置,即原来当前位置的元素及以后元素全部往后移动,当前位置插入新元素。
最简便删除某个值为x的元素:
ve.erase(remove(ve.begin(), ve.end(), x),ve.end());