在没有默认构造函数时初始化 STL 集合元素(不是指针)
initialing stl collection elements (not pointers) when no default constructor?
我有这样的私人字段:
private:
std::vector<OneItemIndex> oneItemIndexes;
我的类以这种方式声明,没有默认构造函数:
public OneItemIndex(int instrumentId)
我希望我的字段包含 10 个元素,如下所示:
oneItemIndexes
0 OneItemIndex(0)
1 OneItemIndex(1)
...
10 OneItemIndex(10)
我该怎么做?我应该在构造函数中写什么?可能吗?
还是我必须使用OneItemIndex*
而不是OneItemIndex
并以这种方式称呼new OneItemIndex(instrumentId
自己?
IndexesStorage::IndexesStorage(void)
{
for (int i = 0; i < 10; i++) {
oneItemIndexes.push_back(new OneItemIndex(i));
}
}
注意:实际上我没有硬编码10
元素,我使用的是动态Instrument::InstrumentsCount()
在 C++11 及更高版本中,您可以通过将构造函数参数传递给 emplace
函数来初始化容器元素:
oneItemIndexes.emplace_back(i);
从历史上看,您可以复制初始化它们(只要它们是可复制的;但这是 C++11 之前vector
的要求(:
oneItemIndexes.push_back(OneItemIndex(i));
我不明白你问题中间向动态分配的飞跃。为什么您认为突然必须使用动态分配和存储指针?
使用循环,但使用正常的自动存储持续时间对象。 oneItemIndexes.push_back(OneItemIndex(i))
甚至oneItemIndexes.emplace(i)
.
您可以使用std::generate
.很抱歉我的回答很简短,但我在手机上。
如果你真的不想让你的对象默认可构造和可复制,解决这个问题的最简单方法是使用 OneItemIndex 的 shared_ptrs 向量。通过这种方式,您可以从shared_ptr获得复制/初始化语义向量所需的内容,但您不需要将它们放在OneItemIndex本身上(原始指针也可以,但是您需要注意删除某处的元素(。
添加到目前为止有效的代码。我不确定这段代码有多稳定,以及使用此类黑客的安全性。为了避免调用复制构造,我必须调用reserve
IndexesStorage::IndexesStorage(void)
{
oneItemIndexes.reserve(Instrument::InstrumentsCount());
for (int i = 0; i < Instrument::InstrumentsCount(); i++) {
oneItemIndexes.emplace_back(i);
}
}
OneItemIndex::OneItemIndex(OneItemIndex& rhs):
CustomIndex("blabla")
{
printf("OneItemIndex copy-construct must not be called, we make it public cause MSVC++ implementation!");
exit(0);
}
- 调整大小后指向元素值的指针unordered_map有效?
- 当该数组的索引中没有元素时,指针指向什么?
- 如何在基类指针向量的元素上应用重载的多态函数
- C++:添加新结构时,结构指针向量中的所有元素都会更新
- C++默认情况下,指针类型数组的元素是否保证初始化为 nullptr?
- 删除指针数组 (C++) 中的元素
- 从指向结构数组的指针中提取元素
- 指向数组基址的指针而不是指向第一个元素的指针有什么优点?
- 获取指向指针的指针元素 (c++)
- 经过最后一个数组元素末尾的指针是否应该等于超过整个数组末尾的指针?
- 存储指向动态数组元素的指针
- 通过作为指向 C++ 函数的指针传递来访问 std::array 元素的正确方法是什么?
- 如何使用指针C++将元素从2D数组复制到1D数组
- 如何将元素插入到标准::地图的共享指针中?
- C++通过别名指针以静默方式将错误的类型分配给数组元素
- 在删除之前更新一组元素指针中的元素
- 从 BST 中删除元素(指针错误)
- 避免强制转换容器的元素指针类型
- 填充一个无序的vector元素指针队列
- OpenCV元素指针如何存在于Obj-C类中