使用包含头文件<vector>
-
初始化
- 一维
-
拷贝初始化
vector<int> a(n + 1, 0); vector<int> b(a); // 两个数组中的类型必须相同,a和b都是长度为n+1,初始值都为0的数组 vector<int> c = a; // 也是拷贝初始化,c和a是完全一样的数组
-
多个元素初始化
vector<int> b{1,2,3,4,5,6};//全部初始化为1 //注意括号不同
-
指定长度和初始化
vector<int> b(3,1);//全部初始化为1
-
指定长度
vector<int> a(5) //建立一个名为a的矢量
-
一维初始化
vector<int> b;//
未分配空间,所以不可以直接赋值,可以使用push_back();
vector<int> b; b.push_back(1);
-
b. 二维
- 内容
-
一维固定长度,二维可变
vector<int> v[5];//定义可变长二维数组 **//注意:行不可变(只有5行), 而列可变,可以在指定行添加元素** //第一维固定长度为5,第二维长度可以改变
vector<int> v[5]
可以这样理解:长度为5的v数组,数组中存储的是vector<int>
数据类型,而该类型就是数组形式,故v
为二维数组。其中每个数组元素均为空,因为没有指定长度,所以第二维可变长。可以进行下述操作:v[1].push_back(2);//在第二行末尾添加元素 v[2].push_back(3);//在第三行末尾添加元素
-
行列均可变
//初始化二维均可变长数组 vector<vector<int>> v;//定义一个行和列均可变的二维数组
应用:可以在
v
数组里面装多个数组vector<int> t1{1, 2, 3, 4}; vector<int> t2{2, 3, 4, 5}; v.push_back(t1);//把t1装进v v.push_back(t2);//把t2装进v v.push_back({3, 4, 5, 6}) // {3, 4, 5, 6}可以作为vector的初始化,相当于一个无名vector
-
行列长度均固定
n + 1
行m + 1
列初始值为0vector<vector<int>> a(n + 1, vector<int>(m + 1, 0)); //套娃
-
c++17或者c++20支持的形式(不常用),与上面相同的初始化
vector a(n + 1, vector(m + 1, 0));
-
可以使用数组访问法来访问每一个元素
- 一维
-
size()
返回容器中元素数
vector<int> a(10); int n=a.size()
-
swap()
交换两个容器中的内容
vector<int> a(2); vector<int> b(2); swap(a,b);//a,b元素交换
当两个矢量容器大小不等
vector<int> a(2); vector<int> b(3); for (int i = 0; i < 2; i++) { cin >> a[i]; cin.get(); } for (int i = 0; i < 3; i++) { cin >> b[i]; cin.get(); } swap(a, b); for (int i = 0; i < 2; i++) { cout << a[i] << endl; } for (int i = 0; i < 3; i++) { cout << b[i] << endl; }
会出错:
输入 1 2 3 4 5
输出 3 4 1 2 -1414812757
-
迭代器
-
声明一个迭代器
vector<int>::iterator pd;//建立一个迭代器pd
vector<int>::iterator pd; vector<int> a(5); pd=a.begin(); *pd=56; cout<<*pd;
可以看出。迭代器相当于一个指针
-
begin() end()
begin是第一个元素
end是最后一个元素的下一个元素
-
-
push_back() 将元素添加到矢量末尾(负责内存管理,增加矢量的长度)
```cpp vector<int>::iterator pd; vector<int> a(5); for (int i = 0; i < 5; i++) { a[i] = i + 1; } int n; a.push_back(n); // 同时实现输入n后,插入最后一个 //()中是要添加的数; cin >> a[5]; for (pd = a.begin(); pd != a.end(); pd++) // 使用迭代器 { cout << *pd << " "; } ```
-
erase( ,) 删除矢量中给定区间的长度
接受两个参数 ```cpp vector<int>::iterator pd; vector<int> a(5); for (int i = 0; i < 5; i++) { a[i] = i + 1; } int n; a.push_back(n); // 同时实现输入n后,插入最后一个 cin >> a[5]; a.erase(a.begin(), a.begin() + 3);//删除第1-3个元素 for (pd = a.begin(); pd != a.end(); pd++) // 使用迭代器 { cout << *pd << " "; } ```
-
insert( , , )(三个参数)
vector<int> a(5); vector<int> b(5); for (int i = 0; i < 5; i++) { a[i] = i + 1; } b.insert(b.begin(), a.begin(), a.end());//插入 for (int i = 0; i < 5; i++) { cout << b[i] << " "; }
-
front()
返回第一个数据
vector<int> a(5); int n=a.front();
-
c.back()
返回数组中的最后一个数据
vector<int> a(5); int n=a.back();
-
c.pop_back()
删除最后一个数据
-
c.clear()
清除元素
-
c.empty()
判断是否为空,为空返回真
-
sort( , ) 对元素排序 -
vector<int> a(n + 1); sort(a.begin() + 1, a.end()); // 对[1, n]区间进行从小到大排序