如何在C ++中打印字符串向量的向量?

时间:2018-04-24 22:56:49

标签: c++

我正在尝试通过将逻辑移动到函数来打印字符串向量的向量。我的程序正常编译,但它不打印我的矢量。

这是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);

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) {