首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >iterate std::vector<std::vector<char> >?

iterate std::vector<std::vector<char> >?
EN

Stack Overflow用户
提问于 2011-02-06 20:28:54
回答 5查看 2.2K关注 0票数 0

我有一个这样的向量:

代码语言:javascript
复制
std::vector<std::vector<char> > _lines;

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

我已经有了以下内容:

代码语言:javascript
复制
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?
        }
EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2011-02-06 20:31:01

代码语言:javascript
复制
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自动推断类型:

代码语言:javascript
复制
for (auto i = _lines.begin(); i != _lines.end(); ++i)
{
    for (auto j = i->begin(); j != i->end(); ++j)
    {
        // ... use *j
    }
}
票数 6
EN

Stack Overflow用户

发布于 2011-02-06 20:30:39

您不能指定像这样的(*first_iter)::iterator类型。只需使用std::vector<char>::iterator即可。

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

票数 1
EN

Stack Overflow用户

发布于 2011-02-06 20:30:52

你需要自己拼写内部迭代器的类型,你不能通过实例上的作用域运算符::来访问类的类型。

代码语言:javascript
复制
std::vector<char>::iterator second_iter = ...
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4913272

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档