预留容量的两类方式:
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());