如何迭代字符串向量的向量? (C ++)

时间:2017-03-06 01:59:40

标签: c++ string multidimensional-array vector iterator

我需要循环遍历 字符串向量 的向量,就像我在整数上执行此操作一样:< / p>

int main()
{
    vector<vector<int>> stuff;
    //fill the inner vector, then insert it into the outer vector

    for (int i = 0; i < 999; i++)
    {
        vector<int>temp;
        for (int j = 0; j < 9; j++)
        {
            temp.push_back(i);
            ++i;
        }
        stuff.push_back(temp);
    }

    //display all elements ...
    for (int i = 0; i < stuff.size(); i++)
    {
        for (int j = 0; j < stuff[i].size(); j++) {
            cout << stuff[i][j] << "\t";
        }
        cout << endl;
    }
}

但字符串需要不同的方法,因为它们更复杂, 在这里,我迭代一维字符串:

vector<string> first_arr = {};
string line;
ifstream myfile("source.txt");
if (myfile.is_open())
{
    while (getline(myfile, line))
    {
        first_arr.push_back(line);  //READ from file
    }
    myfile.close();
}
else cout << "Unable to open file";

但我完全坚持进入内圈。 另外,我期待长度非常不同的字符串

我暂时没有使用c ++,请原谅我的问题,如果它对你来说太明显了,

2 个答案:

答案 0 :(得分:1)

您可以使用相同的逻辑。 除非你想一次打印一个字母。

#include <string>
#include <iostream>
#include <vector>

using std::vector;

int main()
{
    vector<vector<std::string> > vec;

    std::string tmp;

    for(int i = 0; i < 2; ++i)
    {
        vector<std::string> v;
        for(int j = 0; j < 9; ++j)
        {
            std::cin >> tmp;
            v.push_back(tmp);
        }
        vec.push_back(v);
    }

    for(int i = 0; i < vec.size(); ++i)
    {
        for(int j = 0; j < vec[i].size(); ++j)
        {
            std::cout << vec[i][j] << "\t";
        }
        std::cout << std::endl;
    }
    return 0;
}

如果你想用c ++ 11方式,你可以替换这个片段的最后一个循环:

for(const auto &subVec : vec)
{
    for(const auto &str : subVec)
    {
        std::cout << str << "\t";
    }
    std::cout << std::endl;
}

答案 1 :(得分:0)

以下是一个示例,其中包含vector个大小为string510的{​​{1}}个15C++11。此示例使用vector的{​​{3}}来打印#include <iostream> #include <vector> #include <string> #include <algorithm> int main() { using SList = std::vector< std::string >; using VList = std::vector< SList >; VList vlist; for ( int i = 5; i <= 15; i += 5 ) { SList slist { i }; std::fill( slist.begin(), slist.end(), "Test" ); vlist.push_back( slist ); } for ( const auto& v : vlist ) { std::cout << "{ "; for ( const auto& s : v ) { std::cout << s << ' '; } std::cout << "}\n"; } return 0; }

<强>代码:

{ Test Test Test Test Test }
{ Test Test Test Test Test Test Test Test Test Test }
{ Test Test Test Test Test Test Test Test Test Test Test Test Test Test Test }

<强>输出:

temp[:,:,i] = img1[:,:,i]

以下是Ideone的实例:range-based for loop