[C++学习笔记10]vector
- vector简介
vector是一种类型的对象的集合;
vector的数据结构很像数组,能非常高效和方便的访问单个元素;
vector是一个类模板(class template)
要使用vector必须包含相关头文件
#include <vector>
using std::vector; - vector对象的初始化
vector<T> v1; // 默认构造函数v1为空
vector<T> v2(v1); // v2是v1的副本
vector<T> v3(n, i); // v3包含n个值为i的元素
vector<T> v4(n); // v4含有值初始化的元素的n个副本 - vector常用成员函数
size(), clear(), back(), empty(), push_back(), pop_back(), erase(), insert(), [], =, 重载的运算符
#include <iostream> #include <vector> #include <algorithm> using namespace std; void show_vector_1(const vector<int> &v) { for (int i = 0; i < v.size(); i++) { cout << v[i] << endl; } cout << endl; } void show_vector_2(const vector<int> &v) { // 根据我们前面对++的重载,明显后置++的效率比前置++的效率低,所以采用前置++ for (vector<int>::const_iterator it = v.begin(); it != v.end(); ++it) { cout << *it << endl; } cout << endl; } int main(void) { vector<int> v1; v1.push_back(1); v1.push_back(2); v1.push_back(3); v1.push_back(4); v1.push_back(5); v1.push_back(3); //cout << v1.size() << endl; // 6 //cout << v1.back() << endl; // 3 /*v1.pop_back(); cout << v1.back() << endl; // 5 */ /*v1.erase(v1.begin() + 1, v1.begin() + 3); show_vector_2(v1); // 1 4 5 3*/ // 有想法删除容器中的所有值为3的元素 // 使用算法中的remove函数 //remove(v1.begin(), v1.end(), 3); // 并不能正真移除
// remove 与 erase区别:erase一般要删除元素,释放资源。remove主要用在vector中,用于将符合要求的的元素移动到容器尾部,并不删除元素。
v1.erase(remove(v1.begin(), v1.end(), 3), v1.end()); // 这样才行 show_vector_2(v1); return 0; }
-
另一种方法删除容器中指定的元素
通过迭代器循环遍历删除#include <iostream> #include <vector> using namespace std; void show_vector(const vector<int> &v) { // 根据我们前面对++的重载,明显后置++的效率比前置++的效率低,所以采用前置++ for (vector<int>::const_iterator it = v.begin(); it != v.end(); ++it) { cout << *it << endl; } cout << endl; } // 通过迭代器循环删除 void delete_vector(vector<int> &v, int data) { for (vector<int>::const_iterator it = v.begin(); it != v.end(); ) { if (*it == data) it = v.erase(it); // 删除成功返回下一个元素的迭代器 else ++it; } } int main(void) { vector<int> v1; v1.push_back(1); v1.push_back(2); v1.push_back(3); v1.push_back(4); v1.push_back(5); v1.push_back(3); cout << "删除前:" << endl; show_vector(v1); delete_vector(v1, 3); cout << "删除后:" << endl; show_vector(v1); return 0; }