C++向量有效地添加元素

mat*_*ots 3 c++ memory-management stdvector

假设我有以下代码:

#include <iostream>
#include <vector>
using namespace std;

class X {
public:
  int x[1000];
  X(int y) { for (int i = 0; i < 1000; i++) x[i] = y; }
};

int main() {
  vector<X> v;
  X x0(0);
  X x1(1);
  X x2(2);
  v.push_back(x0);
  v.push_back(x1);
  v.push_back(x2);
  cout << v[2].x[33] << endl;
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

如果我理解正确的话,在我的代码,我栈上分配内存x0,x1并且x2,然后通过复制分配给我的那些内容到内存vector.此外,据我所知,移动语义在这里无济于事,因为它并不完全像是X指向位于其他地方的资源的指针.

我可以直接调用分配给我的原始内存块上的构造函数vector吗?如果没有,处理这类情况的正确方法是什么?

Sti*_*sis 11

你需要使用C++ 11 emplace_back.

http://en.cppreference.com/w/cpp/container/vector/emplace_back

此外,如果您担心多余的副本/移动,请尝试从v.reserve(3).

  • @StileCrisis:传递一个临时的,让优化编译器完成它的工作. (3认同)