为什么我不能在使用reserve来分配存储后迭代和打印向量的内容?

Ved*_*xit 0 c++

下面给出的是一个简单的程序,它将输入输入到矢量并尝试使用迭代器打印矢量.为什么不打印矢量?一切似乎都没问题.

#include <cmath>
#include <cstdio>
#include <vector>
#include <iostream>
#include <algorithm>
#include <iterator>
using namespace std;


int main() {
    int n,m,i;
    cin >> n >> m;
    vector<int> v;
    v.reserve(m);
    vector<int>::iterator it;

    for(i=0;i<m;i++)
     cin >> v[i];
   // for(i=0;i<m;i++)
    // cout << v[i];
    for(it = v.begin();it != v.end();it++)
      cout << *(it);  
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

如果输入"4 3 1 2 3",为什么程序没有输出?

Xir*_*ema 6

reserve不做同样的事情resize.reserve是一个提示分配器尝试"预分配"存储许多元素所需的空间.就向量而言,它仍然是0,这意味着它的迭代器将代表0个元素的范围.

更改v.reserve(m);为v.resize(m);,您的问题应该得到解决.

  • @VedantDixit你在`vector`的范围之外操作.这是未定义的行为.也许它有效.也许它没有,也许该计划召唤无人机袭击邻居的猫. (2认同)