因此,我在主函数中初始化一个向量,并将该向量作为引用传递到其大小发生变化的函数中。现在,我想象主函数中初始化的向量的大小会改变,但事实并非如此。我只是错误地执行了这个吗?
#include <iostream>
#include <vector>
using std::vector;
void createImage(vector<vector<char> >& img){
int cols, rows;
std::cin >> rows >> cols;
img.clear();
for(int i = 0; i < rows; i++)
img.push_back(vector<char>(cols, 'O'));
}
void colorPixel(vector<vector<char> > &img){
int xCoord, yCoord;
char color;
std::cin >> xCoord >> yCoord >> color;
img[xCoord][yCoord] = color;
}
void printVector(vector<vector<char> > &img){
for(int i = 0; i < img.size(); i++){
for(int j = 0; j < img[i].size(); j++)
std::cout << img[i][j];
std::cout << '\n';
}
}
int main(){
char operation;
while(std::cin >> operation){
vector<vector<char> > myVector;
if(operation == 'X')
break;
if(operation == 'I')
createImage(myVector);
if(operation == 'C')
printVector(myVector);
if(operation == 'L')
colorPixel(myVector);
}
}
编辑: 这就是正在发生的事情。当你创建向量时, I 5 5 调用 createImage() ,这是可行的,但是当你 L 4 4 P 调用 myVector[4][4] 处的 colorPixel() 时,它开始失败。
如果我将 main 中的 myVector 初始化为 250 250,则 print 将打印所有 250 行,即使在 createImage() 中更改了大小(例如 4 4)之后也是如此。
简而言之,我相信并且确信,main 中的向量没有得到其大小已更改的提示,是否有任何解决方案?
while(std::cin >> operation){
vector<vector<char> > myVector;
在这个
while
循环中发生的第一件事是创建一个新的 myVector
。从字面上看,这就是 C++ 中所说的。
当到达循环末尾时,这个
myVector
就会被销毁。这就是 C++ 的工作原理:如果您在循环中或在 if
语句中声明一个对象,则当执行到达此范围的末尾时,该对象将被销毁。
因此,当这个
while
循环到达终点时,这个 myVector
就会被销毁。它不再存在了。它将会消失。它将轻松存在。它将渴望峡湾。它将成为前 myVector。
然后,再次检查
while
循环的条件,如果条件仍然成立,则执行再次进入 while
,从头开始创建一个新的 myVector
。无论如何,它与之前的 myVector 没有任何关系,这只是一个微弱的记忆。
解决这个问题的方法是在
myVector
的开始处声明这个 main
before,所以这个 myVector
仅当 main
本身完成执行时才会被销毁。