对于这样的代码:
std::list<int> a[3][3];
int myNumber = 0;
for(int i = 0; i < 3; i++)
{
for(int j = 0; j < 3; j++)
{
a[i][j].push_back(myNumber);
myNumber++;
}
}
调试器的本地窗口显示:
没有简单的方法可以通过并看到:
列表 a[ 0 ][ 0 ] 包含 0
列表 a[ 0 ][ 1 ] 包含 1
列表 a[ 0 ][ 2 ] 包含 2
列表 a[ 1 ][ 0 ] 包含 3 等
我只能看到列表 [ 0 ][ 0 ]、[ 1 ][ 0 ] 和 [ 2 ][ 0 ] 包含的内容,但我想查看所有列表包含的内容。我如何在 Visual Studio 2010 中执行此操作?
最佳答案
“没有简单的方法可以查看列表 a[0][2]
包含 2”
你右击某处进入代码,选择Quick Watch,在那里写a[0][2]
并通过添加 watch 将您放入“ watch 1”以便您可以看到您的list<int>
在a[0][2]
当您声明简单 list<int> l;
时, Visual Studio 正确显示它。您可以看到所有元素。
但是当你像这样声明列表数组时:
std::list<int> l[2];
l[1].push_back(3);
l[1].push_back(4);
然后变量l
被认为是指向第一个 std::list<int>
的指针因此,即使您将元素插入索引 1 处的列表,Visual Studio 也只会向您显示 l
是空列表:some address [0]()
.我可以看到 l[1]
仅当它在 watch 中时:
可能的解决方案是用 []
替换简单的 C 风格数组 ( std::vector
) :
std::vector<std::list<int> > l;
l.resize(2);
l[1].push_back(3);
l[1].push_back(4);
所以 l
不被视为指向第一个 list
的指针了。自 l
是vector
Visual Studio 正确显示所有元素:
关于c++ - 调试列表数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9343053/