c++ - vector 复制构造函数 C++ : does it have to be linear time?

标签 c++ vector

我有一个包含 STL 映射类型对象的 vector ,我执行 vector.push_back(some map)

不幸的是,这调用了 map 复制构造函数,并且浪费了很多时间。我知道我可以通过保留指向 map 的(智能)指针 vector 来解决这个问题 - 但这让我想知道 - 我读到 STL 无论如何都会将其数据保存在堆上而不是堆栈上 - 那么为什么复制 ctor 不是O(1) 时间,通过简单地复制指针?

最佳答案

如果在将拷贝推回 vector 后不再需要原始 map ,请写:

some_vector.push_back(std::move(some_map));

如果您还没有 C++11 编译器,请添加一个空映射,然后将其与原始映射交换:

some_vector.resize(some_vector.size() + 1);
some_vector.back().swap(some_map);

关于c++ - vector 复制构造函数 C++ : does it have to be linear time?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9350886/

相关文章:

c++ - 关于c++中vector的观察

c++ - 如何为 Code Blocks 13.12 编译 boost 1.55.0 至 win7(32 位)?

c++ - 基于图像的计数算法对移动传送带上的物体进行计数

c++ - 找不到全局命名空间范围内的函数名称

C++ 测验 : Display Answer Choices with Vector Correct Cycling

c++ - 连续输出(最多)4 个 vector 元素

xml - 如何在r中将向量输出到xml

c++ - 如何附加到带有命令行参数的进程?

c++ - 使用 Boost 类型特征进行条件编译

c++ - 将大 vector 存储在堆栈中是个坏主意吗?