该resize()函数使vector包含所需数量的元素.如果我们需要的元素少于vector已包含的元素,则最后的元素将被删除.如果我们要求矢量增长,它将扩大其大小并用零填充新创建的元素.
vector<int> v(20);
for(int i = 0; i < 20; i++) {
v[i] = i+1;
}
v.resize(25);
for(int i = 20; i < 25; i++) {
v[i] = i*2;
}
Run Code Online (Sandbox Code Playgroud)
但是如果我们使用push_back()after resize(),它将在新分配的大小之后添加元素,但不是INTO它.在上面的例子中,结果向量的大小是25,而如果我们在第二个循环中使用push_back(),它将是30.
vector<int> v(20);
for(int i = 0; i < 20; i++) {
v[i] = i+1;
}
v.resize(25);
for(int i = 20; i < 25; i++) {
v.push_back(i*2); // Writes to elements with indices [25..30), not [20..25) ! <
}
Run Code Online (Sandbox Code Playgroud)
那么resize()功能的优势在哪里?它是否会为索引和访问向量中的元素造成混淆?