如何在 Visual Studio 即时窗口中获取迭代器的元素值? *迭代器不起作用[关闭]
Posted
技术标签:
【中文标题】如何在 Visual Studio 即时窗口中获取迭代器的元素值? *迭代器不起作用[关闭]【英文标题】:How to get the element value of the iterator in Visual Studio immediate window ? *iterator doesn't work [closed] 【发布时间】:2016-01-18 08:48:25 【问题描述】:更新
似乎我们不能使用*iter
来获取迭代器中元素的值。
那么有没有一种简单的方法来获取 iter 的值?
我不想每次都输入iter->xxx._xxx->_xxx
。
我尝试使用 AHK 重新映射字符串,有没有更好的方法?
我在 Visual Studio 2013 的即时窗口中使用 *iterator
。
迭代器定义为std::vector<std::string>::iterator iter = a.begin()
我想检查iterator
指向的字符串的值。
但我得到 错误
没有操作符*匹配操作数
[
这是为什么呢? 或者我怎样才能以简单的方式获得迭代器的值?
【问题讨论】:
索要在你的代码中产生这个错误的那段代码会不会太过分了? 试试这个for(const auto& iter : a) std::cout << iter;
@TarikNeaj:我想会的。
@TarikNeaj:附图显示了问题。仅此一次,我认为图像可能是正确的方式(错误文本都是?中文?)
@TarikNeaj 我可以通过在红色矩形的第一行输入我想要的东西,iter._Ptr->_Bx.Ptr
,这似乎很乏味。我试过*iter
它失败了。
【参考方案1】:
*
运算符对迭代器进行了重载,以便让您访问它们的底层值,并保持与指针相同的语义。在某些情况下,指针可以被视为迭代器,例如在迭代 C 样式数组时。这就是您可以在 STL 算法中使用 C 样式数组的原因。
Visual Studio 中的即时窗口似乎不理解 *
运算符对于您的迭代器类型已重载。这就是您收到此错误的原因。
【讨论】:
那么有没有更好的方法来获取迭代器中的元素值? 有一种方法可以为 watches 和 debug value popups [in this thread] (***.com/a/111634/4515566) 定义您自己的查看器,但我'我不知道它适用于 立即 窗口,但我想如果您只想查看值,这不是问题,对吧? @lizhe 你试过了吗? 是的,非常感谢您的帮助【参考方案2】:基本上有no solution,它是Visual Studio 在上个世纪一直停留的领域之一。显然有太多脆弱的技术,尝试修复 Visual Studio 的一个位(编辑并继续)会破坏另一个(调试器可视化)
【讨论】:
以上是关于如何在 Visual Studio 即时窗口中获取迭代器的元素值? *迭代器不起作用[关闭]的主要内容,如果未能解决你的问题,请参考以下文章
Linq 扩展方法在 Visual Studio 2015 即时窗口中不可用
Visual Studio 2008/10 的即时窗口中的“搜索内存”是不是损坏?
Visual Studio 即时窗口 - 不允许使用 Lambda 表达式 - 是不是有解决方法或替代方法? [关闭]
如何让 Visual Studio 在 TFS 获取后打开解决冲突窗口