vector是一个能够存放任意类型的动态数组,能够增加和压缩数据。使用vector 需要在头文件中增加 #include <vector>
vector其实是一个模板,我们在使用时必须指定元素的类型,如声明一个int类型的vector,
vector<int> test; //声明一个int类型的vector叫test。
vector初始化:
vector<int> test(10,-1); // test初始化为含有10个元素值为-1的vector容器。
或 vector<int> test={1,2,3,4}; //test含有元素为1,2,3,4这4个元素,这是c++新的标准,有的编译器可能不支持。
如何动态的添加元素到vector中呢?
1. push_back() // 使用vector中的成员函数push_back()可以往vector中添加函数。长度不限。
可以通过下标修改、访问指定位置的元素,如test[2]访问vector中的第3个元素,与数组类似。
或
通过迭代器访问修改vector中的元素,如
vector<int>::iterator it;
for(it=test.begin();it!=test.end();it++) //vector中的begin()成员函数获得第一个元素,end()获得最后一个函数。
cout<<*it<<" "; // 输出vector中的所有元素。 这里也可以修改元素的值 如 *it=10,将元素的值改为10;
2. at(int index) // 获得指定下标的元素。
3. size() // 获得vector的元素的个数。
4. empty() // 判断vector是否为空,为空返回true。
5. erase() // 从指定容器删除指定位置的元素或某段范围内的元素,指向的是删除元素的下一个元素。返回值是一个迭代器.
特别注意:
如vector中有: 3 10 10 6 9 15
一一遍历容器找到元素值为10,然后一一删除
- for(Iter = v1.begin(); Iter != v1.end(); Iter++)
- {
- if(*Iter == 10)
- {
- v1.erase(Iter); //这里可能会出现错误(当调用erase()后Iter迭代器就失效了,变成了一野指针。)最好还是采用下面修改后的方式,
- }
- }
- for(Iter = v1.begin(); Iter != v1.end(); Iter++)
- {
- if(*Iter == 10)
- {
- Iter = v1.erase(Iter);//Iter为删除元素的下一个元素的迭代器
- }
- }
注意:这里只删除了一个10,原因是erase函数返回的是删除元素的下一个元素,然后这后面还有Iter++,所以就跳过了后面那个10.
clear() // 移除容器中所有数据。
pop_back()
// 删除最后一个数据。
insert(pos,elem)
// 在pos位置插入一个elem拷贝,传回新数据位置。
c1.swap(c2)
swap(c1,c2) // 将c1和c2元素互换。
vector提供了erase(),pop_back(),clear()来删除数据。
温馨提示: 对于list删除元素可以使用remove方法。
例子如下:
list<int> a;
a.push_back(1);a.push_back(6);
a.push_back(3);
a.push_back(6);
a.push_back(6);
a.push_back(2);
list<int>::iterator itor;
a.remove(6);
for(itor=a.begin();itor!=a.end();itor++)
cout<<*itor<<" ";