iterate std :: vector >?
问题描述:
我有一个这样的载体:iterate std :: vector <std :: vector <char>>?
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?
}
答
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
}
}
答
不能指定类型这样(*first_iter)::iterator
。只需使用std::vector<char>::iterator
。
(*first_iter)->begin()
应该是(*first_iter).begin()
(或first_iter->begin()
)。 *first_iter
是一个std::vector<char>
,而不是一个指针。
答
你需要自己拼写内部迭代器的类型,你不能通过一个实例的scope operator ::来访问一个类的类型。
std::vector<char>::iterator second_iter = ...
答
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()
...
}
答
这是做的方式它:
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();
}
你应该存储char数据在std :: strings和no t在std :: vectors中。 – flownt 2011-02-06 21:16:05