介绍
- vector是一个可存储任意类型数据的动态数组。
- 分配空间方式:当分配空间不够时,会申请更大的内存空间(增长倍数:2),将原数据拷贝到新的内存块中,释放原内存空间。[连续线性空间]
用法
1. 声明和初始化
int size = 10;
int a = 1;
int arr[5] = { 1,2,3,4,5 };
//vector construction
vector<int> v1;
//vector initialization:five types
vector<int> v1(size); //type 1
vector<int> v1(size, 5); //type 2
vector<int> v2(v1); //type 3
vector<int> v2(v1.begin(), v1.begin() + 4); //type 4
vector<int> v2(arr, arr + 2); //type 5
2. 基本操作
(1)字符串拼接
v1.push_back(a); // 尾部插入
v1.pop_back(); //尾部删除
v1.insert(v1.begin() + 2, 2);//在v1[1]后面(即v1[2]的位置)插入1个数,值均为2
v1.insert(v1.begin() + 2, 2, 3);//在v1[1]后面插入2个数,值均为5
v1.insert(v1.begin() + 2, arr + 2, arr + 4);//在v1[1]后面插入arr[2] ~ arr[3]的数
v1.erase(); //操作同insert,删除元素
v1.assign(v2.begin(), v2.begin() + 2); //将v2[0]~v2[1]赋值到v1,清除以前的内容
v1.assign(5, 1); // v1含有5个元素,每个元素均为1
v1.clear(); // 清空v1元素
(2)元素访问
v1[1]; //下标访问
v1.at(1); //at访问,at会检查是否越界
v1.front(); //访问第一个元素
v1.back(); //访问最后一个元素
(3)方法
v1.empty(); //v1是否为空
v1.capacity(); //v1的容器大小
v1.size(); //v1的实际大小
v1.swap(v2); //交换v1和v2
v1.resize(20); //v1元素个数调整为20个,值随机
v1.resize(20,1); ////v1元素个数调整为20个,值为1
v1.reserve(30); //将v1的capacity调整为30
(4)迭代器
vector<int>::iterator it;
vector<int>::const_iterator c_it;
it = v1.begin(); //v1首指针
it = v1.end(); //v1尾指针
c_it = v1.cbegin(); //v1的首指针,返回常迭代器
c_it = v1.cend(); //v1的尾指针,返回常迭代器
(5)算法
#include <algorithm>
sort(v1.begin(), v1.begin() + 3); //v1[0]~v1[2]排序
reverse(v1.begin(), v1.begin() + 3); // v1[0]~v1[2]翻转
copy(v1.begin(), v1.begin() + 3, v2.begin() + 1); //v1[0]~v1[2]复制到v2[1]~后面
find(v1.begin(), v1.begin() + 3, 10); //v1[0]~v1[2]中找10,返回位置(迭代器)
3. vector作为函数形参
void function_1(vector<int> vec) // 值传递,实参给形参赋值时调用了拷贝构造函数
void function_2(vector<int> &vec) // 传引用,不会调用拷贝构造函数
void function_3(vector<int> *vec) // 传指针,不会调用拷贝构造函数
(1)值传递:vec作用域仅为函数内部,形参值修改不影响实参值。
(2)引用传递:引用是实参的别名,共用同一个内存空间,形参值修改影响实参。
(3)指针传递:指针指向实参地址,形参修改会影响实参。
void function_1(vector<int> vec) {
int tmp;
tmp = vec[1];
vec[0] = vec[1];
vec[1] = tmp;
cout << "function_1 :";
for (auto it = vec.begin(); it != vec.end(); it++)
{
cout << *it;
}
cout << endl;
}
void function_2(vector<int> &vec) {
int tmp;
tmp = vec[1];
vec[0] = vec[1];
vec[1] = tmp;
cout << "function_2 :";
for (auto it = vec.begin(); it != vec.end(); it++)
{
cout << *it;
}
cout << endl;
}
void function_3(vector<int> *vec) {
int tmp;
tmp = (*vec)[1];
(*vec)[0] = (*vec)[1];
(*vec)[1] = tmp;
cout << "function_3 :";
for (auto it = vec->begin(); it != vec->end(); it++)
{
cout << *it;
}
cout << endl;
}
运行结果:
来源:CSDN
作者:AraSauHan
链接:https://blog.csdn.net/qq_42018838/article/details/103577017