在 Visual Studio 2012 中单步执行以下示例代码时:
std::vector<int> test;
test.resize(1);
test[0] = 4;
我可以设置手表进行测试并检查其第 0 个元素。但是,如果我在 test[0] 上设置监视,我会收到错误“没有运算符“[]”与这些操作数匹配”:
如何直接检查 test[0] 的值?
在 Visual Studio 2012 中单步执行以下示例代码时:
std::vector<int> test;
test.resize(1);
test[0] = 4;
我可以设置手表进行测试并检查其第 0 个元素。但是,如果我在 test[0] 上设置监视,我会收到错误“没有运算符“[]”与这些操作数匹配”:
如何直接检查 test[0] 的值?
我找到了一种不依赖于类内部的解决方案。操作员调用的扩展形式似乎对我有用。在这种情况下,它是以下代码:
v.operator[](0)
我在 Visual C++ 2012 中对其进行了测试。
正如@NateKohl 所指出的,在 Visual Studio 2012(以及可能的早期版本)v._Myfirst
中,提供了一个指向底层矢量数据的指针,让您可以像查看数组一样查看矢量。
Visual Studio 不支持 stl 容器的 operator[] 重载,您只需在调试时通过从列表中选择它来手动设置您感兴趣的元素的监视。
编辑:如果要检查向量内的 T 对象,请将其分配给 T 对象并在其上设置监视
如果你使用2D vecotr<vector< string >> dp,并且你想在VS2013的watch window中获取dp[i][j],你可以使用(dp.operator [ ] (i)).operator [ ] (j )
向量<向量<字符串>>dp(n,向量<字符串>(n,“”));
(dp.operator [ ] (i)).operator [ ] (j)