今天调一个程序,里面用到了vector,在GDB里面看vector里面的东西一点也不直接,如果碰到vector<vector<int> >,要想看看里面的内容就更不爽了。也可能是我不知道有什么好办法,如果谁知道,麻烦告诉我一下。
没有办法,只要弄个Dump函数来看:
template <class T>
void DumpArrayArray(vector<vector<T> >& arr)
{
cout<< "Dumping Data:" << endl;
vector< vector<T> >::iterator outIter = arr.begin();
for (; outIter!= arr.end(); outIter++)
{
vector<T>::iterator inIter = (*outIter).begin();
for (;inIter!=(*outIter).end();inIter++){
cout << *inIter << "t";
}
cout << endl;
}
}
猜猜GCC报什么错来着,其实我估计Visual Studio也会报一样的错,编译错哦:
clsAggregateGroups.cpp:In function ‘void DumpArrayArray(std::vector<std::vector<T, std::allocator<_CharT> >, std::allocator<std::vector<T, std::allocator<_CharT> > > >&)’:
clsAggregateGroups.cpp:38: error: expected `;’ before ‘outIter’
见鬼,我明明定义了vector<vector<T> >::iterator outIter的啊,后来我让开林帮我看看,他一离开座位,我就想起来了,这是typename的问题。当我们使用类型推导的时候 vector<vector<T> >::iterator , C++编译器没有办法肯定这个iterator是类型呢,还是变量?所以需要程序员明确的告诉编译器,以前我看STL源码解析的时候看到过的。
所以我应该改成:typename vector<vector<T> >::iterator outIter; 这样编译就过了。