c++ - 我应该返回一个迭代器还是一个指向 STL 容器中元素的指针?

标签 c++ stl

我正在开发一个用于将现有代码移植到不同平台的引擎。现有代码是使用第三方 API 开发的,我的引擎将根据我的新平台重新定义这些第三方 API 函数。

以下定义来自API:

typedef unsigned long shape_handle;    
shape_handle make_new_shape( int type );

我需要重新定义 make_new_shape 并且我可以选择重新定义 shape_handle

我已经定义了这个结构(简化):

struct Shape
{
    int type
};

make_new_shape 的调用者不关心 Shape 的底层结构,它只需要一个“句柄”,这样它就可以调用如下函数:

void `set_shape_color( myshape, RED );`

其中 myshape 是形状的句柄。

我的引擎将为 Shape 对象管理内存,其他要求指示引擎应将 Shape 对象存储在列表或其他可迭代容器中。

我的问题是,如果 Shape 本身要存储在 std::list 中——一个迭代器、一个指针、一个索引,那么表示这个句柄的最安全方法是什么?

最佳答案

如果你试图在对象被删除后访问它们,迭代器或指针都会做坏事,所以两者本质上都不安全。迭代器的优势在于它可用于访问集合中的其他成员。

因此,如果您只想访问您的 Shape,那么指针将是最简单的。如果您想遍历列表,请使用迭代器。

索引在列表中是无用的,因为 std::list 不会重载 [] 运算符。

关于c++ - 我应该返回一个迭代器还是一个指向 STL 容器中元素的指针?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3699797/

相关文章:

c++ - 我可以通过对象访问类中函数中的变量吗?

c++ - 将 2D 像素阵列旋转 90 度

c++ - std vector 内存分配 Linux 与 Windows 编译器

c++ - C 数组的反向迭代器

c++ - 在STL映射中通过引用查找并返回

c++ - 优雅地检查 std::find "not found"条件

c++ - 使用 dlsym 访问类符号

c++ - 通过一个 switch 语句发送不同的变量

c++ - 为什么 lower_bound 和 upper_bound 的谓词版本不一致地传递迭代器值?

c++ 字符数组是否超出范围?