今天倒是学到了想着看一看离散化,发现他用了几个我不会的东西,vector,lower—bound,unique然后就去看了看 发现c++的东西是真的好用。
vector有很多的功能,大致如下
c++中的一种容器相当于一种动态的数组,可以实现很多操作
需要头文件#include<vector>
Vector<int>v1//定义了一个int型的容器v1;
//在这种情况下是不允许用数组来个v1赋值
V1[0]=1这种方式是错的,因为容器内没有给他分配空间
Vector<int>v1(10)//定义了一个int型的容器给他分配来了十个元素的空间,元素默认为0;此时可以使用数组的方式为其赋值;
Vector<int>v1(5,666)定义时指定了五个元素的内存,同时所有元素赋值为666;
定义时可以使用其他容器来初始化自己
vector<int> v1(5, 666);
// 定义时可以使用其他容器来初始化自己
vector<int> v2(v1); // v1 和 v2 相等
// 也可以使用 返回迭代器 的方式将一个容器的元素全都赋值给自己
vector<int> v1(5, 666);
vector<int> v2(v1.begin(), v1.end());
begin 和 end 返回来的就是一个指针迭代器,所以可以进行加减操作,指向其他元素的位置
vector<int> v1(5, 666);
// 将v1的元素从第三个元素到最后的元素赋值给v2
vector<int> v2(v1.begin() + 2, v1.end());
可以使用数组来初始化容器
int Array[5] = {1, 2, 3, 4, 5};
// 将数组元素1,2,3,4给容器赋初值
vector<int> v1 = (Array, Array+3);
size 获取容器的元素个数
v1.size();
capacity 获取容器的大小;
v1.capacity();
begin 获取容器第一个元素的迭代器
vector<int> v1(10, 666);
v1.begin();
end 指向容器最后一个元素的下一个位置的迭代器
vector<int> v1(10, 666);
v1.end();
assign 赋值玩法
第一种玩法 会改变原来vector中的元素内存大小
将v1元素修改为5个,并且赋值888
vector<int> v1(10);
v1.assign(5, 888); // 打印结果5个888
第二种玩法,使用迭代器赋值
将容器v2的10个1赋值给v1,使得v1和v2相等
vector<int> v1(5);
vector<int> v2(10, 1);
v1.assign(v2.begin(), v2.end()); // 打印结果10个1
第三种玩法,使用指针赋值
将数组的所有元素都赋值给v1
int Array[5] = { 9, 8, 7, 6, 5 };
vector<int> v1;
v1.assign(Array, Array + 4); // 打印结果9,8,7,6,5
第四种玩法,使用赋值运算符重载
将v1所有元素赋值给v2
vector<int> v1(10, 1);
vector<int> v2;
v2 = v1; // 打印结果10个1
resize 将容器缩小和变大
一、把容器元素缩小
vector<int> v1(10);
v1.resize(5); // 缩小长度为5
1
2
3
二、把容器扩大时,并给增加的元素赋值
vector<int> v1(5);
v1.resize(8, 111); // 扩充v1容器的大小为8,后续新增加的使用111赋值
三、把容器扩大,不给增加的元素赋值
vector<int> v1(5);
v1.resize(15);
empty 判断容器是否为空
为空返回true,为假返回false
vector<int> v1(5);
if (v1.empty() == NULL) {
cout << "v1为空!" << endl;
}
push_back 尾部添加一个元素
vector<int> v1;
v1.push_back(1); // 在尾部增加要给1
pop_back 尾部删除一个元素
vector<int> v1(10);
v1.pop_back(); // 在尾部删除一个元素
at 和数组使用方式差不多
给第一个元素赋值1
vector<int> v1(10);
v1.at(0) = 1;
输出容器里的所有元素
cout << "v1的所有元素:";
for (int i = 0; i < v1.size(); i++) {
cout << v1.at(i) << ", ";
}
front 获取容器的第一个元素
vector<int> v1(10);
v1.front();
// 也可以使用他们赋值
v1.front() = 111; // 给第一个元素赋值111
back 获取容器的最后一个元素
vector<int> v1(10);
v1.back();
// 也可以使用他们赋值
v1.back() = 222; // 给最后一个元素赋值222
insert 元素的插入
vector<int> v1(10);
// 往第一个元素的位置插入一个5
v1.insert(v1.begin(), 5);
// 从第三个元素位置开始插入5个222
v1.insert(v1.begin() + 2, 5, 222);
vector<int> v2(3, 111);
// 从第二个元素开始插入v2的所有值
v1.insert(v1.begin() + 1, v2.begin(), v2.end());
erase 与 clear 元素删除
vector<int> v1(10);
// 删除第一个元素
v1.erase(v1.begin());
// 删除第一个到第三个元素
v1.erase(v1.begin(), v1.begin() + 3);
// 删除全部元素
v1.clear();
————————————————