vector
vector的注意事项:
- 需要包含头文件
#include <vector>
vector<int> arry;
意味着定义了一个一维数组arry,而vector< vector<int> > arry;
意味着定义了一个二维数组arry- vector中的迭代器:
其中常用的迭代器是v.begin()和v.end()
vector的初始化方式与赋值
vector 是 C++ 标准模板库(STL)中的一个动态数组类,它可以根据需要自动调整大小,并提供许多有用的操作。vector 的初始化和赋值方式有以下几种:
- 不带参数的构造函数: 这种方式会创建一个空的 vector,没有任何元素。例如:
vector<int> v; // 创建一个空的 vector,类型为 int;可以使用assgin等方式对他进行赋值
- 带参数的构造函数: 这种方式可以指定 vector 的初始大小和元素值。例如:
vector<int> v(10); // 创建一个大小为 10 的 vector,每个元素的默认值为 0
vector<int> v(10, 1); // 创建一个大小为 10 的 vector,每个元素的初始值为 1
- 拷贝构造函数: 这种方式可以利用另一个同类型的 vector 来初始化 vector,相当于复制一个 vector。例如:
vector<int> v1(5, 1); // 定义一个 vector v1,大小为 5,每个元素为 1
vector<int> v2(v1); // 通过 vector v1 初始化 vector v2,包含 v1 的所有元素
- 区间赋值: 这种方式可以将一个区间内的元素拷贝到另一个区间中,区间可以是 vector 的迭代器,也可以是数组的地址。例如:
vector<int> v1(5, 1); // 定义一个 vector v1,大小为 5,每个元素为 1
int a[5] = {2, 2, 2, 2, 2}; // 定义一个数组 a
vector<int> v2(10); // 定义一个 vector v2,大小为 10
vector<int> v2(v1.begin(), v1.end()); // 将 v1 的所有元素拷贝到 v2,前面是闭区间会取到v1.begin的值,后面是开区间不会取到v1.end的值
vector<int> v3(v1.begin()+2, v1.end());//将 v1 的第3个元素到最后一个元素拷贝到 v3
vector<int> v4(a, a + 5, v2.begin() + 5); // 将数组 a 的所有元素拷贝到 v4 的后半部分
vector的打印方式(推荐使用第一个或第三个)
方法一:使用基本的for循环
int printvector(vector<int>&vec){
for (int i = 0; i < vec.size(); i++) {
cout << vec[i] << " ";
}
cout << endl;
return 0;
}
方法二:使用基于范围的for循环
int printvector(vector<int>&vec) {
for (auto element:vec) {
cout << element << " ";
}
cout << endl;
return 0;
}
方法三:使用迭代器
int printvector(vector<int>&vec) {
for (auto it = vec.begin(); it != vec.end(); it++) {
cout << *it << " ";
}
cout << endl;
return 0;
}
vector的常用函数(v.empty()、v.capacity()、v.size())
int emptyvector(vector<int>&v){
if(v.empty())//如果vector容器为空,则v.empty()结果为真
cout << "vector容器为空" << endl;
else
cout << "vector容器不为空" << endl;
cout << "vector容器容量为:"<< v.capacity()<<endl;
cout << "vector容器大小为:"<< v.size()<< endl;
}
vector的插入和删除
插入:
int insertvector(){
vector<int>v1;
givevector(v1);//赋值v1
v1.push_back(1);//在尾端元素后插入元素1
v1.insert(v1.begin(),11);//在迭代器begin()指向位置插入元素11,被指向的元素会在插入元素后面
v1.insert(v1.begin(),2,11);//在迭代器begin()指向位置插入2个元素11,被指向的元素会在插入元素后面
}
删除:
int deletevector(){
vector<int>v1;
givevector(v1);//赋值v1
v1.pop_back();//删除尾端元素
v1.erase(v1.begin());//删除迭代器指向的元素
v1.erase(v1.begin(),v1.begin()+2);//删除前迭代器到后迭代器之间的元素,前闭后开,前迭代器指向的元素会被删除,后迭代器指向的元素不会被删除
v1.clear();//删除容器中所有元素
}
vector数据读取
void datawrite(){
vector<int>v1;
givevector(v1);//赋值v1
cout << "vector容器中第二个元素为:" << v1[1]<< endl;
cout << "vector容器中第三个元素为:" << v1.at(2)<< endl;
cout << "vector容器中第一个元素为:" << v1.front()<< endl;
cout << "vector容器中最后一个元素为:" << v1.back()<< endl;
}