【问题标题】:Is it possible to get the pointer the continous memory fragment in a std::vector<char> in C++?是否可以在 C++ 中的 std::vector<char> 中获取指向连续内存片段的指针?
【发布时间】:2011-04-01 01:36:23
【问题描述】:

我将代码移动到使用std::vector&lt;char&gt; 而不是char *mem = malloc(...) 但现在我面临一个问题,即我只能通过operator [] 访问矢量数据,而不能通过指针访问。

我不能写这样的东西:

std::vector<char> data;
fill_data(data);
char *ptr = data;

在我能做到之前:

char *data = malloc(100);
fill_data2(data);
char *ptr = data;

是否仍然可以通过指针访问vector 中的数据?

谢谢,博达·赛多。

【问题讨论】:

    标签: c++ memory pointers vector malloc


    【解决方案1】:

    访问矢量数据的标准方法是使用

    &data[0]
    

    【讨论】:

    • 在未来,C++0x 将添加一个data() 成员来更明确地做到这一点。
    • 但要注意向量的重新分配。
    • C++ 标准是否保证内存存储在一个连续的块中? 编辑:是的,请参阅 Herb Sutter 文章。
    • @Philipp:确实是的,因为vector 的创建考虑了 C 兼容性。当不强制要求 C 兼容性时,最好使用 deque,因为它更严格的迭代器有效性要求和更好的性能(通常)。
    【解决方案2】:

    当然。该载体就是为此目的而设计的:

    char * p = &(myVector[0]) ;
    

    现在,p 指向向量中的第一个项目,您可以像在 C 中一样通过指针来访问每个项目。

    【讨论】:

    【解决方案3】:

    您可以完全合法地编写该代码。您需要做的就是更改 fill_data 以获取std::vector&lt;T&gt;&amp;。当然,如果这是一个外部的 C API,那么你在这件事上没有太多选择。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-03-04
      • 2011-04-24
      • 2016-02-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多