初始化和设置向量<int>

HoK*_*y22 0 c++ initialization vector

vector<int> v;
v.push_back(0); //you have to do this
//v[0] = 0;     //this gives you an error
v[0] = 1000000; //but now you can set it
Run Code Online (Sandbox Code Playgroud)

那么,为什么第一次初始化一个向量时,你需要push_back,之后你可以设置它吗?对于基本类型,比如int,你可以做int i = 0; 用于初始化.

Jos*_*nco 5

如果事先知道向量的大小,最后不要使用普通的push_back()序列,因为如果向量很大(比如> 512个元素),重新分配可能会浪费时间.

更好:

选项1:预分配和推送

vector<int> v;
v.reserve(N); // N is the expected size, but right now [0] is undefined. 
for (...) { 
  v.push_back(...);  // No problems in adding more than N elements, but may have to reallocate.        
}
Run Code Online (Sandbox Code Playgroud)

选项2:调整大小和填充

vector<int> v;
v.resize(N);
for (size_t i=0;i<N;i++)
  v[i] = ...; // You can't write past N-1 here!
Run Code Online (Sandbox Code Playgroud)

选项3:直接使用正确的尺寸创建,然后填写

vector<int> v(N);
for (size_t i=0;i<N;i++)
  v[i] = ...; // You can't write past N-1 here!
Run Code Online (Sandbox Code Playgroud)

选项4:创建具有正确大小的向量并初始化为某个固定值

vector<int> v(N,val); // v[0:N-1] are all equal to val
Run Code Online (Sandbox Code Playgroud)