我正在尝试通过将逻辑移动到函数来打印字符串向量的向量。我的程序正常编译,但它不打印我的矢量。
这是main上的函数调用:
showInst(vectInst);
这是.hpp中的原型:
void showInst(vector<vector<string>> vectInst);
这是实现.cpp:
void showInst(vector<vector<string>> vectInst) {
for(i=0; i<vectInst.size(); i++){
for(j=0; j<vectInst[i].size(); j++){
cout << vectInst[i][j];
}
}
}
这是函数的原型,它接收向量矢量来初始化它
void initInst(vector<vector<string>> vectInst, int numbInst);
这是.cpp
void initInst(vector<vector<string>> vectInst, int numbInst) {
int i, j;
string inst;
for(i=0; i<numbInst; i++){
vector<string> vect;
for(j=0; j<4; j++){
cin >> inst;
vect.push_back(inst);
}
vectInst.push_back(vect);
}
}
请致电主要:
vector<vector<string>> vectInst;
initInst(vectInst, 2);
答案 0 :(得分:0)
函数showInst
中的第一个:不按值传递向量:这会产生每个字符串/向量的无用副本。改为使用const引用:
void showInst(vector<vector<string>> const & vectInst);
函数的代码是正确的,尽管我们更喜欢for-range循环:
for (auto const & string_vec : vectInst) {
for (auto const & str : string_vec) {
cout << str;
}
}
您的矢量可能是空的,或者甚至可能无法调用此函数。问题必定在其他地方 我建议你在这个功能的开头和结尾打印一些括号。
您的向量确实是空的,因为您(也)在initInst
函数中按值传递它。这是您正在修改的本地副本,而不是原始副本。
通过引用传递:
void initInst(vector<vector<string>> & vectInst, int numbInst) {
^
答案 1 :(得分:0)
initInst()
正在修改您在vector
中声明的main()
的副本。要修改vector
中的main()
,您需要通过引用而不是按值传递它。
改变这个:
void initInst(vector<vector<string>> vectInst, int numbInst) {
对此:
void initInst(vector<vector<string>> &vectInst, int numbInst) {