vector使用过程中的一些坑(持续更)
1.vector为空时不能通过下标标赋值,如:
#include <iostream>
#include <vector>
using namespace std;
int main()
{
vector<int> v;
v[0] = 1;
return 0;
}
v初始为空所以出错
但只要初始vector有容量通过下标赋值就可以:
#include<bits/stdc++.h>
using namespace std;
int main()
{
vector<int>a(1);
a[2]=1;
cout<<a[2];
}
就能成!
2.vector通过数组下标访问时注意vector为空时不能通过下标标赋值,如:
#include<bits/stdc++.h>
using namespace std;
int main()
{
vector<int>a;
a[2]=1;
cout<<a[2];
}
v初始为空所以出错
但只要初始vector有容量通过下标赋值就可以:
#include<bits/stdc++.h>
using namespace std;
int main()
{
vector<int>a(1);
a[2]=1;
cout<<a[2];
}
3.vector通过数组下标访问时注意这个元素是存在的,不然会出现运行内存错误,如:
#include<bits/stdc++.h>
using namespace std;
int main()
{
vector<int>a(10);
a[2]=1;
a[10]=1;
cout<<a[10];
}
a[10]是越界的,这段代码访问了vector末尾以后的元素,这将可能导致很危险的结果,但系统不会报错。
建议使用at函数访问如:
vector<int> v(10,0);
cout<<v.at(11)<<endl;
以下的代码将更加安全,取代试图访问内存里非法值的作法,at() 函数能够辨别出访问是否越界并在越界的时候中止程序。
4.创建类似二维数组的vector:
vector<int> v[N];
它创建了一个由第1个类型的N个vector组成的静态数组。
v[0]现在是一个和v[1]完全不同的vector。注意,v[0]是vector而不是vector中的元素。如果我们想向第1个vector push一个值,可以通过 v[0].push_back(val)。为了访问那个元素我们可以通过 v[0][0]来访问(类似2维矩阵)。
例:
vector <int> v2[n];
v2[0].push_back(1);
v2[0].push_back(20);
cout << '\n';
for(int i = 0; i < v2[0].size(); i++ )
cout << v2[0][i] << " ";
**5.**vector容器可以通过还可以通过以下2种构造函数初始化:
vector<int> v(v2);
vector<int> v = v2;
v从v2 复制数据。