1.向量vector基本操作及用法
1.1 vector简介
vector属于STL中的一种自定义数据类型。是可以装载各种数据类型的动态数组(动态分配内存),具有连续的、顺序的储存结构。使用vector要加上<vector>
头文件
1.2 vector常用情形
vector
的数据储存在堆空间中,不会爆栈。一般来说vector可以替换掉普通数组。有些情况下普通数组无法解决,可以使用vector。例如数据量较大的矩阵
- 用普通数组
int a[10000005][10000005]
,这样会导致内存浪费 - 用vector就可以解决这个问题
vector<vector<int>> a(n+10, vector<int> (m + 10))
1.3vector基本用法
1.3.1vector构造
vector<类型>函数名称(长度,初值)
vector<int> a;
vector<int> b(100);
vector<int> c(100,1);
//二维vector
vector<vector<int>> mat(100,vector<int>(200,1));//构造100行200列初值为1的二维数组
1.3.2输入、输出
直接用cin、cout即可
//.size()获取当前vector长度
vector<int> arr(5);
for(int i = 1; i < arr.size(); i++)
cin >> arr[i];
for(int i = 1; i < arr.size(); i++)
cout << arr[i] <<" ";
1.3.3尾删、尾接
在vector
尾部接上或者删除一个元素,长度加一或者减一
vector<int> arr(5,1);
arr.push_back(6);
arr.push_back(66);
for(int i = 1; i < arr.size(); i++)
cout << arr[i] << " ";
cout << endl;
arr.pop_back();
for(int i = 1; i < arr.size();i++)
cout << arr[i] << " ";
cout << endl;
1.3.4判空、清空
判空.empty()
,如果为空返true
,不为空返回false
(返回布尔变量)
清空.cleal()
,清空当前vector
if(arr.empty())
cout << "yes " << endl;
else
cout << "no " << endl;
arr.clear();
for(int i = 1; i < arr.size(); i++)
cout << arr[i] << " ";
cout << endl;
if(arr.empty())
cout << "yes" << endl;
else
cout << "no " << endl;
1.3.5修改长度
修改vector
长度.resize(新长度,赋初值)
。如果长度缩短,则删除多余的值。如果长度扩大,且指定了默认值(不指定默认为0),则新元素均为默认值(旧元素不变)
cout << arr.size() << endl;
arr.resize(10,1);
cout << arr.size() << endl;
for(int i = 1; i < arr.size(); i++)
cout << arr[i] <<" ";
1.4vector注意事项
当心.size()
溢出:长度溢出后会直接变为0
vector<int> a(100005);
long long a = a.size * a.size();
最好提前指定长度
vector
在分配内存时会有额外的时间开销,如果题中已经给出长度,最好在构建函数时直接指定长度