我有这样的矢量:
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?
}
答案 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_iter
是std::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();
}