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

How do I iterate over a vector of string vectors? (c++)

本文关键字:向量 何迭代 字符串 迭代      更新时间:2023-10-16

我需要以与我在此示例上使用向量>整数:

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 ,请原谅我的问题,如果您似乎太明显了,

这是一个示例,其中三个 vector s的 string s尺寸 51015。此示例使用C++11的基于循环的范围来打印vectors。

代码:

#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 }

这是IDEONE上的实时示例:http://ideone.com/pyyd5p

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

#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;
}