首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >用于以通用方式返回序列的C ++ API

用于以通用方式返回序列的C ++ API
EN

Stack Overflow用户
提问于 2018-12-11 01:26:07
回答 2查看 0关注 0票数 0

如果我正在编写一个库,并且我有一个需要返回一系列值的函数,我可以这样做:

代码语言:javascript
复制
std::vector<int> get_sequence();

但是,这需要库用户使用std :: vector <>容器,而不是允许它们使用他们想要使用的任何容器。此外,它还可以添加返回数组的额外副本(取决于编译器是否可以优化),这可能会对性能产生负面影响。

理论上,您可以通过创建一个带有开始和结束的模板化函数来启用任意容器(并避免不必要的额外复制):

代码语言:javascript
复制
template<class T_iter> void get_sequence(T_iter begin, T_iter end);

然后,该函数将序列值存储在迭代器给定的范围内。但问题在于它需要您知道序列的大小,以便在序列之间存储足够的元素beginend存储所有值。

我想过一个界面如:

代码语言:javascript
复制
template<T_insertIter> get_sequence(T_insertIter inserter);

这要求T_insertIter是一个插入迭代器(例如用它创建std::back_inserter(my_vector)),但这似乎太容易被滥用,因为编译器很乐意接受非插入迭代器,但在运行时会表现不正确。

那么有一个最佳实践来设计返回任意长度序列的通用接口吗?

EN

Stack Overflow用户

发布于 2018-12-11 10:50:33

如果您已经为序列管理了内存,则可以返回一对迭代器,供调用者在for循环或算法调用中使用。

如果返回的序列需要管理自己的内存,那么事情会更复杂。您可以使用@ paercebal的解决方案,或者您可以实现自己的迭代器,将shared_ptr保存到它们迭代的序列中。

票数 0
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/-100000935

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档