在 C++ 中,每当一个函数创建许多(数百或数千个)值时,我曾经让调用者传递一个数组,然后我的函数用输出值填充该数组:
void computeValues(int input, std::vector<int>& output);
output
因此,该函数将用它计算的值填充向量。但这并不是真正好的 C++ 风格,正如我现在所意识到的那样。
以下函数签名更好,因为它不承诺使用 a std::vector
,但可以使用任何容器:
void computeValues(int input, std::insert_iterator<int> outputInserter);
现在,调用者可以调用 some inserter
:
std::vector<int> values; // or could use deque, list, map, ...
computeValues(input, std::back_inserter(values));
同样,我们不承诺std::vector
专门使用,这很好,因为用户可能只需要 astd::set
等中的值。(我应该iterator
通过值还是通过引用?)
我的问题是:insert_iterator
这样做是正确的还是标准的方法?还是有更好的东西?
编辑:我编辑了这个问题,以明确我不是在谈论返回两个或三个值,而是返回数百或数千个值。(假设您已返回在某个目录中找到的所有文件,或图中的所有边等)