c++ - std::deque<char> 上的简单插入-删除-插入给出了奇怪的结果

标签 c++ stl deque

这是一个简单的程序

#include <iostream>
#include <deque>
#include <string.h>

std :: deque <char> d;

int main ()
{
    const char * X = "abcdefg";

    d .insert (d .end (), X, X + strlen (X));

    d .erase  (d .begin (), d .begin () + 4);

    d .insert (d .end (), X, X + strlen (X));

    std :: cout .write (& d [0], d .size ());
}

我预计输出为“efgabcdefg”,实际输出为十六进制

65 66 67 00  00 00 00 C9  0B 02

这是“efg???????”

出了什么问题?

最佳答案

std::deque 不会将其元素连续存储在内存中。如果需要,请使用 std::vector。换句话说,&d[0] 不是长度为 d.size() 的缓冲区的开始,您可以将其传递给 write().

关于c++ - std::deque<char> 上的简单插入-删除-插入给出了奇怪的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16442374/

相关文章:

c++ - 了解递归函数中的错误?

c++ - 从 std::string 隐式转换为 eaSTL::string

c++ - 如何快速将元素重复插入到排序列表中

C++ 双端队列抛出段错误

c# - 在 PeekCompleted 方法中从 messageQueue 中出队

c++ - C++ 中的回调,模板成员?

c++ - 如何将 lambda 用于 std::find_if

c++ - 我应该返回一个迭代器还是一个指向 STL 容器中元素的指针?

c++ std::fstream 在 MacOS 上的行为

c++ - 双端队列内存分配可以稀疏吗?