我有一个包含 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/