【发布时间】:2014-11-19 08:46:25
【问题描述】:
我想将函数返回的范围连接成一个大范围。考虑以下代码:
some_type_i_cant_figure_out bar() {
typedef std::vector<int>::const_iterator iter;
std::vector<int> aaa;
/* fill some data into aaa*/
some_type_i_cant_figure_out cc;
for (int i = 0; i < aaa.size(); ++i) {
std::pair<iter, iter> bbb = foo(aaa, i);
ccc = boost::join(ccc, bbb);
}
return ccc;
}
我想要实现的目标:
aaa 向量很大, foo 可能返回相当大的范围。当然,我可以将范围内所有元素的副本创建到新的整数向量中并返回它。它效率低下,浪费内存和时间。所以我想返回一个 boost::joined_range。在最坏的情况下,我可以使用范围向量,但它太简单而且不那么优雅:)
除了joined_range 不是默认可构造的(这对这个示例实现来说是一个问题)之外,返回值类型是什么?临时变量 (ccc) 类型以及实现上述目标的正确和优雅的方法是什么?
【问题讨论】:
-
aaa的大小是否已知(或有界?)您要达到什么目的?看起来您只是对向量进行稳定排序... -
尺寸未知。更改示例以使其更清晰
标签: c++ visual-studio-2012 boost boost-range