【发布时间】:2018-10-14 20:58:31
【问题描述】:
考虑一个接受一个或多个参数(例如文件名)的函数。为了使其具有通用性,最好为通用迭代器范围编写它:
template<class Iter>
void function(Iter first, Iter last)
{
// do something
}
现在我们可以通过以下方式调用它,与我们如何存储参数无关:
WhateverContainer container;
function(std::begin(container), std::end(container));
例如,STL 严重依赖这种范例。
现在,假设我们想要使用未存储在容器中的单个参数调用函数。当然可以这样写:
const int value = 5;
std::vector<int> vec(1, value);
function(std::begin(vec), std::end(vec));
但这个解决方案对我来说似乎很笨拙和浪费。
问题:是否有更好的低开销方法来创建单个变量的迭代器范围兼容表示?
【问题讨论】:
-
其实我想我看错了你的例子,但无论如何现在它更清楚了
-
出于好奇:您可以在单个元素上以有意义的方式使用适用于范围的哪些函数?
-
例如可以处理一个或多个由其名称给出的文件的函数可能是一个用例。
-
@piripiri 不确定这是否是最好的设计,但可能最好让该功能仅在单个文件上运行并在范围上使用
std::for_each。这可能并不总是合适,但它至少是一个总是值得考虑的替代方案...... -
@piripiri,如果函数调用的参数是独立的,请记住,一次只保留一个元素允许使用并行算法等操作,而无需额外工作。
标签: c++ stl iterator iterator-range