通过引用传递的 C++ 向量未修改
C++ vector passed by reference not modified
当我通过引用将 std::vector<std::string>
传递给一个写入向量的函数时,被调用函数修改向量但调用函数看不到修改。
例如,在下面的代码中,oData
的大小为 20,而 data
的大小为 0。为什么?
#include <iostream>
#include <fstream>
#include <string>
#include <vector>
bool ReadFile(const std::string & iFile, std::vector<std::string> & oData) {
std::ifstream myfile(iFile);
if (!myfile.is_open()) {
std::cout << "Unable to open file";
return false;
}
else {
std::string line;
while (getline(myfile, line)) {
std::cout << line << '\n';
oData.push_back(line);
}
myfile.close();
}
return true;
}
int main() {
std::vector<std::string> data;
ReadFile("numbers.txt", data);
return 0;
}
注意:在 Windows10
上使用 Visual Studio 2015
问题出在 Visual Studio 调试器中的断点位置。
return
后的断点 --> 数据大小 = 0; screenshot
return
之前的断点 --> 数据大小 = 实际大小。 screenshot
当我通过引用将 std::vector<std::string>
传递给一个写入向量的函数时,被调用函数修改向量但调用函数看不到修改。
例如,在下面的代码中,oData
的大小为 20,而 data
的大小为 0。为什么?
#include <iostream>
#include <fstream>
#include <string>
#include <vector>
bool ReadFile(const std::string & iFile, std::vector<std::string> & oData) {
std::ifstream myfile(iFile);
if (!myfile.is_open()) {
std::cout << "Unable to open file";
return false;
}
else {
std::string line;
while (getline(myfile, line)) {
std::cout << line << '\n';
oData.push_back(line);
}
myfile.close();
}
return true;
}
int main() {
std::vector<std::string> data;
ReadFile("numbers.txt", data);
return 0;
}
注意:在 Windows10
上使用 Visual Studio 2015问题出在 Visual Studio 调试器中的断点位置。
return
后的断点 --> 数据大小 = 0; screenshot
return
之前的断点 --> 数据大小 = 实际大小。 screenshot