vector 是将元素置于一个动态数组中的加以管理的容器。
vector可以随机存取元素(支持索引直接存取,用[]操作符或at()方法,后面会详细概述
vector 尾部添加或移除元素非常快速,但是在中间或者头部插入元素或移除元素比较费时
具体参考:
https://blog.csdn.net/weixin_41743247/article/details/90635931
vector的添加和删除:
1 vector<int> v1; 2 cout << "length : " << v1.size() << endl; 3 v1.push_back(1); 4 v1.push_back(2); 5 v1.push_back(3); 6 //修改头部元素的值 7 //函数返回值当左值 应该返回一个引用 8 v1.front() = 11; 9 v1.back() = 55; 10 cout << "length : " << v1.size() << endl; 11 //获取头/尾部元素 12 cout << "头部元素 : " << v1.front() << endl;
vector的初始化:
1 vector<int> v1; 2 v1.push_back(1); 3 v1.push_back(3); 4 v1.push_back(5); 5 v1.push_back(7); 6 7 vector<int> v2 = v1;//对象初始化 8 vector<int> v3(v1.begin(), v1.begin() + 2); 9 vector<int> v4(3, 9);//存放三个9;
vector的数组遍历:
1 void printV(vector<int>& v) 2 { 3 for (int i = 0; i < v.size(); i++) 4 { 5 cout << v[i] << " "; 6 } 7 } 8 void main33() 9 { 10 //通过数组的方式遍历 11 vector<int> v1(10);//通过数组方式赋值:需要把内存准备好 12 for (int i = 0; i < 10; i++) 13 { 14 v1[i] = i + 1; 15 } 16 //for (int i = 0; i < 10; i++) 17 //{ 18 // cout << v1[i] << " "; 19 //} 20 printV(v1); 21 } 22 int main() 23 { 24 main33(); 25 26 27 system("pause"); 28 return 0; 29 }
push_back原理
vector<int> v1(10); v1.push_back(100); v1.push_back(200); cout << "size: " << v1.size() << endl; printV(v1);
可以知道 push_back 是从vector数组的最后开始插入,并且插入一次就增加一个元素。(上述程序中数组增加了2个元素的大小)。
使用迭代器遍历:
//1 迭代器 end()的理解 //1 3 5 //▲ // ▲ //当it == v1.end()的时候,说明这个容器已经遍历完毕了 //end()的位置 应该是5的后面 //2.迭代器的种类 vector中有正向迭代器 和 逆向迭代器 void main35() { vector<int> v(10); for (int i = 0; i < 10; i++) { v[i] = i + 1; } for (vector<int>::iterator it = v.begin(); it != v.end(); it++) { cout << *it << " "; } //逆向遍历 用vector提供的逆向迭代器 for (vector<int>::reverse_iterator rit = v.rbegin(); rit != v.rend(); rit++) { cout << *rit << " "; } }
vector 删除和插入
vector<int> v(10); for (int i = 0; i < 10; i++) { v[i] = i + 1; } //区间删除 v.erase(v.begin(), v.begin() + 3); printV(v); //根据元素的位置 指定位置删除 v.erase(v.begin());//在头部删除元素 printV(v); //根据元素的值删除 v[1] = 2; v[3] = 2; printV(v); for (vector<int>::iterator it = v.begin(); it != v.end(); ) { if (*it == 2) { it = v.erase(it);//当删除迭代器所指向的元素的时候,erase函数会让it自动下移 } else { it++; } } printV(v); v.insert(v.begin(), 100);//头插法 v.insert(v.end(), 200);//尾插法 printV(v);