V E C T O R 可变数组 VECTOR\ 可变数组 VECTOR 可变数组
头文件:#include <vector>
vector是一个动态数组容器,它的大小可以根据需要自动扩容。当向vector中添加元素时,如果当前的容量不足,vector会自动分配更多的内存空间,并将已有元素复制到新的内存区域中。
vector实现自动扩容的方式是使用指数级增长策略,即每次扩容时,将当前容量乘以一个大于1的因子(通常是2),来计算新的容量大小。
vs中以1.5倍扩容,gcc中则是2倍扩容。如果扩容之后的大小还是不够,就会扩容到需要的大小。
初始化
//初始化一个空的vector
vector<int> v;
//初始化一个长度为10的vector,每个值都是1,如果省略第二个参数,默认为0
vector<int> v(10, 1);
//用另一个vector初始化
vector<int> v(v1);
//使用初始化列表初始化
vector<int> v{1, 2, 3, 4, 5};
//使用迭代器初始化
vector<int> v(v1.begin(), v2.end()); // 从vector中获取
vector<int> v(arr, arr + 10); // 从数组中获取
成员函数
-
插入
//在末尾插入666 v.push_back(666); //在指定位置插入元素 v.insert(v.begin() + 3, 666); // 在v的第4个位置插入666
-
删除
//删除末尾的元素 v.pop_back() //删除指定位置的元素 v.erase(v.begin() + 3); // 删除v的第四个元素
-
访问元素
// at成员函数 cout << v.at(0) <<endl; // 下标运算符 [] cout << v[0] <<endl; // 访问第一个元素 cout << v.front() <<endl; // 访问最后一个元素 cout << v.back() <<endl;
-
容器大小
// 获取v中元素的个数 cout << v.size() << endl; // 获取v分配的空间大小 cout << v.capacity() << endl; // 改变容器的大小 v.resize(6); // 容器是否为空 cout << v.empty() <<endl; //空则返回true,不空返回flase
-
清空
// 清空容器中的所有元素 v.clear();
遍历
-
迭代器遍历
for (vector<int>::iterator it = v.begin(); it != v.end(); it++) cout << *it << " "; //auto自动推导类型 for (auto it = v.begin(); it != v.end(); it++) cout << *it << " ";
-
数组下标遍历
for (int i = 0; i < v.size(); i++) cout << v[i] << " ";
-
C++11范围遍历
for (auto x : v) cout << x << " ";