gpt4 book ai didi

c++ - 在模板容器中存储元素

转载 作者:行者123 更新时间:2023-11-27 23:21:26 25 4
gpt4 key购买 nike

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

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

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

有没有人有任何想法或知道内置的 STL 容器如何解决这些问题?我希望我已经足够清楚我的要求...

链接:

我正在移植的文件

提前谢谢你。

最佳答案

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

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

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

关于c++ - 在模板容器中存储元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12633247/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com