用于非可复制类型的整数可索引RAII容器

BCS*_*BCS 4 c++ containers stl

是否有一个标准容器具有相同的通用API,vector<T>但是通过直接默认构造填充新位置?


背景:

我有一个类型,不允许复制,但有一个默认的构造函数,我真正想做的是这样的:

vector<NoCopy> bag(some_size);

// use bag[i]'s

return; // bag & contents get correctly cleaned up. 
Run Code Online (Sandbox Code Playgroud)

但是,这不起作用,因为它vector<T>(int)是根据默认构造对象然后将其复制到每个新位置来实现的.


编辑:不是C++ 0xB(又名C++ 11)

Jam*_*lis 5

一种选择是升级到符合C++ 11的标准库实现.

在C++ 11中,vector(size_type)构造函数默认将N个元素构造到容器中.它既不复制也不移动任何元素.

Visual C++ 2010不支持此C++ 11功能; 我相信Visual C++ 11 Developer Preview确实支持它.我不知道libstdc ++的最新版本是否支持这个; 我怀疑libc ++会这样做.

  • @NicolBolas:在C++ 98中,是的.在C++ 11中,有一个新的构造函数`vector(size_type)`,它默认将元素直接构造到容器中.在构造期间,不允许实现复制或移动任何元素. (5认同)