我需要一个实现以下API的容器(不需要实现其他任何东西):
class C<T> {
C();
T& operator[](int); // must have reasonably sane time constant
// expand the container by default constructing elements in place.
void resize(int); // only way anything is added.
void clear();
C<T>::iterator begin();
C<T>::iterator end();
}
Run Code Online (Sandbox Code Playgroud)
并可用于:
class I {
public:
I();
private: // copy and assignment explicate disallowed
I(I&);
I& operator=(I&);
}
Run Code Online (Sandbox Code Playgroud)
剂量这样的野兽存在吗?
vector<T>不这样做(调整大小的动作),我不确定它有多快deque<T>.
我不关心分配
有几个人认为我无法复制的原因是内存分配问题.约束的原因是元素类型明确禁止复制,我不能改变它.
看起来我得到了答案:STL没有.但现在我想知道为什么不呢?
您可以使用指针容器,例如std::vector<T*>,如果无法复制元素并在其他位置手动管理其内存.
如果向量应该拥有元素,那么类似的东西std::vector< std::shared_ptr<T> >可能更合适.
还有Boost Pointer Container库,它提供了用于异常安全处理指针的容器.
我很确定这里的答案是一个相当强调的"不".根据您的定义,resize()如果我正确读取它,应分配新存储并使用默认构造函数进行初始化.然后,您将通过索引到集合并操纵引用来操纵对象,而不是"插入"到集合中.否则,您需要复制构造函数和赋值运算符.标准库中的所有容器都有此要求.
您可能希望使用类似的东西boost::ptr_vector<T>.由于您正在插入指针,因此您不必担心复制.这将要求您动态分配所有对象.
| 归档时间: |
|
| 查看次数: |
759 次 |
| 最近记录: |