考虑以下示例:
vector<vector<char>*> *outer = new vector<vector<char>*>();
{
vector<char> *inner = new vector<char>();
inner->push_back(0);
inner->push_back(1);
inner->push_back(2);
outer->push_back(inner);
inner->push_back(3);
}
auto x = outer->at(0);
for (auto c : x) {
cout << c << ",";
}
我想迭代vector<char>*
的值;我怎么能做到这一点?
答案 0 :(得分:6)
为什么不简单地取消引用x
?
for (auto c : *x) { // Here
cout << c << ",";
}
通过引用将*x
,因此,不会复制。
答案 1 :(得分:2)
x
的类型为vector<char>*
,因此您需要迭代x
指向的内容;你需要取消引用x
。
for (auto&& c : *x) {
// ^ dereference the container for a range
// ^ note the use of &&
作为旁注;
0
,1
等的字符不可打印,我可以使用0x31
等进行测试,或只是推回字符'0'
, '1'
等。auto&&
,以避免在容器返回代理对象时出现副本或细微错误。答案 2 :(得分:1)
这是一个示范程序
n=1
程序输出
#include <iostream>
#include <vector>
#include <cstring>
int main()
{
const char *s = "Hello Lu4";
std::vector<std::vector<char> *> *v =
new std::vector<std::vector<char> *>( 1, new std::vector<char>( s, s + std::strlen( s ) ) );
for ( char c : *( *v )[0] ) std::cout << c;
std::cout << std::endl;
for ( auto p : *v ) delete p;
delete v;
}
您也可以使用以下循环
Hello Lu4
如果要在演示程序中使用此循环,您将得到与上面相同的结果,因为“外部”向量只包含一个索引为0的元素。