我使用的是Visual Studio 2013,在其悠久的历史中,它永远无法在调试器中显示向量元素,抱怨no operator "[]" matches these operands
消息。我知道有一个解决方法需要输入v.operator[](n)
,但这对我来说是不可接受的。我想将光标悬停在v[n]
上方并查看其值,或者最多选择或剪切并粘贴v[n]
以查看值。是否可以使用其他Windows C ++ IDE?
我知道向量的所有元素都显示在Autos
和Locals
窗口中,但我的向量太长,不适合实用。
答案 0 :(得分:5)
只需在Watch区域中为每个[]
添加前缀_Myfirst
:
YourVector._Myfirst[n]
答案 1 :(得分:2)
欺骗:
假设您有std::vector<int> v;
,并希望在观看v[23]
或v[23]..v[23+n]
中看到这样做:
,!
(例如:v,!
),这表示要关闭调试器可视化的VS. _Myfirst
,_Mylast
和_Myend
。将_Myfirst
添加到手表中。这是指向向量存储器开头的指针。v,!
。_Myfirst
元素添加到结尾+ offset, count
,其中offset是您希望在监视中首先看到的向量索引,count是您想要的向量元素的数量看到。会是这样的:(*((std::_Vector_val<std::_Simple_types<int> >*)(&(*((std::_Vector_alloc<0,std::_Vec_base_types<int,std::allocator<int> > >*)(&(v)))))))._Myfirst + 23, 100
。这让你可以看到从位置23开始的向量的100个元素(是的,我知道它是_Myfirst元素的大)。您可以使用变量指定offset
和count
(例如:匹配代码中的表达式,如v[n]
用作偏移n
和count
,无论您想要什么,常数或变量。从第17分钟开始,Debugging Tips and Tricks,Going Native Episode 28的一些信息有一些好处,评估表达式可以在评论中。例如你有一些代码。
v[n] = ... + pre_calculate(v[n]) + ...
// You could put a comment like this:
// (*((std::_Vector_val<std::_Simple_types<int> >*)(&(*((std::_Vector_alloc<0,std::_Vec_base_types<int,std::allocator<int> > >*)(&(v)))))))._Myfirst + n, 100
// And when you hover the mouse over the selected expression, you see the evaluation. Much better I think.
答案 2 :(得分:0)
在MSVC的标准库实现中,_M_start
,_M_finish
和_M_end_of_storage
是_Vector_base
中可以使用的公共成员。
vector._M_start[n]
答案 3 :(得分:0)
此方法将对您使用的任何C ++ IDE有效;首先,您必须知道存储第一个元素的向量成员名称。
(在borland 6 c ++中),您可以通过在已经将其添加到watchs窗口中之后检查向量来执行此操作。在Visual中,它称为“不同”。
然后,您必须在手表中添加以下语法: nameVector.memberWichPointsToTheFirstElement [startIndex],numElementsDesiredToDisplay。
您完成了。但是当向量在实例内部时,它不会显示任何内容:不允许出现副作用。