在模板容器中存储元素

时间:2012-09-28 03:33:46

标签: c++ templates stl containers

我有一个模板类,我正在为一个项目工作,它的行为有点像C ++ STL中的一个容器类,但我遇到了一些问题,找出一个好的安全方法来实现它。

一些背景知识:我正在尝试将一个名为Artemis的现有项目(实体系统框架)从Java移植到C ++。有一个名为bag的类,它本质上是一个ArrayList,但是它包含的项目存储在数组中,并使用索引查找以便更快地访问,存储的元素大部分存储它们自己的索引,但这并不重要。 / p>

问题:好的,所以我有一个包含T数组(模板类型)的模板类。我的问题是T元素的返回。在我的T &Get(int index)函数中,我想返回对给定索引处元素的引用,但是如果该元素不存在,我不知道该怎么做。我想返回类似null的东西,但这不起作用,因为T的类型不能保证是一个指针。我可以让容器类包含T* s,但是我会遇到一些奇怪的问题/复杂的int和非指针(std::string)以及一些超出范围的项目(除非我复制了值?)。

有人有任何想法或知道内置STL容器如何解决这些问题? 我希望我明确表达了我的要求......

链接:

文件我正在移植

提前谢谢。

1 个答案:

答案 0 :(得分:4)

标准关联容器(mapunordered_map等)在使用[]语法时创建一个默认构造的对象,并返回对该语法的引用。

您可以这样做,也可以在元素不存在时抛出异常。标准关联容器具有执行此操作的at函数。

另一种方法是使用类似标准容器的find函数的函数,该函数将迭代器返回给元素而不是对元素的引用。如果元素不存在,则返回的迭代器等于end(container)。这样,您可以实际检查元素是否存在而不使用异常。