代码之家  ›  专栏  ›  技术社区  ›  Steve

为什么不能在即时窗口中索引std::vector?

  •  13
  • Steve  · 技术社区  · 16 年前

    所以,我有一个向量

     std::vector<std::string> lines. 
    

    我把这个向量填满,可以像

     std::string temp = lines[0];
    

    但是,在即时窗口中,两者都是

     lines[0] - error:overloaded operator not found
    

     lines.at(0) - error:symbol is ambiguous
    

    根本不工作。使用C++的即时窗口是否有诀窍。我主要来自C背景,在那里一切都很好地工作(我在即时窗口中有智能感知)。我没想到C++是伟大的,但我认为它对Its之外的东西也有用。有人能告诉我我做错了什么吗?谢谢。

    编辑:我应该很清楚,在即时窗口中没有真正起作用的东西,这只是一个简单的例子

    编辑:我处于调试模式

    2 回复  |  直到 10 年前
        1
  •  14
  •   please delete me    16 年前

    即时和监视窗口不支持过载的操作员。有一些支持以明智的方式将标准容器作为一个整体打印(参见,例如, http://www.virtualdub.org/blog/pivot/entry.php?id=120 但是这并不能扩展到能够使用 operator[] 在他们身上。

    希望这在调试器的后续版本中会有所改进,但现在,要查看向量的第i个元素,请尝试 lines._Myfirst[i] .

    ( _Myfirst 在与vc++一起提供的标准库中,恰好是 std::vector 它指向序列的第一个元素。所以这只是像检查其他物体一样检查向量。为了解决这个问题,我必须查看标题…不是很方便,但希望这对你有帮助。您可能可以对其他容器执行类似的操作,但您必须查看头中的内容,以了解如何操作。)

    (顺便说一下,如果你一直在C语言中工作,C++调试器可能看起来比一般的略微逊色一些,这只是其中的一个例子。我觉得在CLR方面还有很多工作要做。)

        2
  •  -1
  •   ChF    10 年前

    在现在的Visual Studio版本(例如2013/2015)中,std::vector变量不再存在myFirst成员变量。使用c_begin代替-对于给定示例,使用的方法是,例如,行。c_begin[i]。