如何用范围for循环输入C++二维vector?新手求助
范围for循环写入二维vector的问题解决
你的问题出在范围for循环的变量传递方式上:
错误原因
- 外层循环
for(vector<int> v1d : vec)中,v1d是vec里每个一维vector的副本,不是原容器的引用。你对v1d的所有修改都只作用在这个临时副本上,原vec不会有任何变化。 - 内层循环
for(int x : v1d)同理,x是v1d中元素的副本,cin >> x只是修改这个临时变量,根本碰不到原vector里的元素。
而用cout时能正常输出,是因为读取副本的内容和原容器一致,不需要修改,所以看起来没问题。
正确写法
要直接操作原容器的元素,必须在范围for循环中使用引用:
vector<vector<int>> vec(n, vector<int>(m)); // 外层用引用,直接操作vec中的一维vector for(vector<int>& v1d : vec){ // 内层用引用,直接操作一维vector中的元素 for(int& x : v1d){ cin >> x; } }
这样修改后,cin输入的值会直接写入原vec的对应位置,就能正常工作了。
内容的提问来源于stack exchange,提问作者Shakil Khan
相关产品推荐
相关产品推荐

