iterate std :: vector <std :: vector <char>&gt;?</std :: vector <char>

时间:2011-02-06 12:28:54

标签: c++ vector iterator

我有这样的矢量:

std::vector<std::vector<char> > _lines;

我想迭代这些向量和包含在其中的向量,但是我不确定如何使用第一个迭代器访问内部向量?

我已经拥有以下内容:

std::vector<std::vector<char> >::iterator first_iter = _lines.begin();

        for (; first_iter != _lines.end(); first_iter++)
        {
            (*first_iter)::iterator second_iter = (*first_iter)->begin();  // something is wrong with this? How do I get the second vector to iterate?
        }

5 个答案:

答案 0 :(得分:6)

for (std::vector<std::vector<char> >::iterator i = _lines.begin();
                                               i != _lines.end(); ++i)
{
    for (std::vector<char>::iterator j = i->begin(); j != i->end(); ++j)
    {
        // ... use *j
    }
}

如果您使用现代编译器,则可以使用C ++ 0x功能auto自动推断类型:

for (auto i = _lines.begin(); i != _lines.end(); ++i)
{
    for (auto j = i->begin(); j != i->end(); ++j)
    {
        // ... use *j
    }
}

答案 1 :(得分:1)

您无法指定类似此(*first_iter)::iterator的类型。只需使用std::vector<char>::iterator

(*first_iter)->begin()应为(*first_iter).begin()(或first_iter->begin())。 *first_iterstd::vector<char>,而不是指针。

答案 2 :(得分:1)

你需要自己拼写内部迭代器的类型,你不能通过示例中的scope运算符::来访问类的类型。

std::vector<char>::iterator second_iter = ...

答案 3 :(得分:1)

std::vector<std::vector<char> >::iterator first_iter =_lines.begin();
for (; first_iter != _lines.end(); first_iter++) {

     std::vector<char>::iterator second_iter = (*first_iter).begin(); // or first_iter->begin()
     ...
}

答案 4 :(得分:0)

这将是这样做的方法:

std::vector<std::vector<char> >::iterator first_iter = _lines.begin();

for (; first_iter != _lines.end(); first_iter++)
{
   std::vector<char>::iterator second_iter = first_iter->begin();
}