一、vector
c++中有一个比数组操作更方便的容器vector,vector可以快速实现对数据的查找和处理。
1、向量的初始化
//对向量进行简单的初始化操作
#include <iostream>
#include <vector>
int main()
{
vector<int> vc; //定义向量,int可换为其他类型
/*******
* vector<int> vc(10); //初始状态申请十个元素
* vector<int> vc(vector<int> b); // 生成 b 的副本
* vector<int> vc(10, 3); // 生成 10 个值为 3 的元素
*******/
for (int i = 0; i < 10; i++) // 也是赋值的一种,用循环赋值
{
vc.push_back(i);//在向量末尾追加元素
}
//结果:0 1 2 3 4 5 6 7 8 9
return 0;
}
2、赋值
vc.push_back() 只能在向量末尾追加元素,vc.insert()则可以在向量的任何位置增加元素
// 1)用函数向向量中插入元素
vector<int>::iterator it;
it = vc.begin();//vc.begin()函数可用于获取向量的第一个元素的迭代器
//vc.end()函数可以用于获取向量末尾的后一个位置的迭代器
//(注意:是末尾的后一个位置,而不是末尾)
<1>
vc.insert(it + vc.size() - 3, 11);
// 在迭代器位置插入元素
//vc.size()可以用于获取 vc的有效长度(元素个数)
// 结果: 0 1 2 3 4 5 6 11 7 8 9
<2>
vc.insert(it, 3, 5);
// 从 it 位置开始,插入 3 个大小为 5 元素
// 结果:5 5 5 0 1 2 3 4 5 6 11 7 8 9
<3>
vector<int> b(3,4);
vc.insert(it, b.begin(), b.end() - 2);
// 在 it 处添加 b 向量中下标在区间 [b.begin(), b.end() - 2) 的元素,注意右面是开区间
// 结果: 4 5 5 5 0 1 2 3 4 5 6 11 7 8 9
// 2)用迭代器进行赋值
*(it) = 5;
//结果:5 1 2 3 4 5 6 11 7 8 9
3、对向量内容的处理
1)获取元素
<1>用函数获取
cout << vc.front(); // 返回向量的第一个元素
cout << vc.back(); // 返回向量的最后一个元素
// 结果:1 9
<2>用迭代器获取
it = vc.begin();
cout << *(it + n); // 返回第 n + 1 个元素
<3>用下标获取(用下标的方式不可进行赋值操作)
cout << vc[n] // 返回下标为 n 的元素,及第 n + 1 个元素
2)删除元素
it = vc.begin();
<1>
vc.erase(it); // 删除 it 迭代器出的元素
// 结果:1 2 3 4 5 6 11 7 8 9
<2>
vc.erase(it, it + 2); // 删除迭代器区间 [it,it + 2) 内的元素
// 结果:3 4 5 6 11 7 8 9
<3>
vc.pop_back(); // 删除最后一个元素
// 结果:3 4 5 6 11 7 8
<4>
vc.clear(); //清空向量内的所有元素
4、向量的其他相关函数
vc.empty(); // 判断向量是否为空,为空返回 0
vc.swap(vector<int> b); // 交换 vc 和 b 向量的地址及内容
swap(vc, vector<int> b); // 也可以实现对 vc 和 b 的地址和内容的交换
swap(*(it), *(it + 3)); // 交换向量内的两个元素
vc.max_size(); // 可以获取向量可以存储的最大个数