gpt4 book ai didi

c++ - 将单个参数传递给需要迭代器范围的函数

转载 作者:IT老高 更新时间:2023-10-28 21:44:25 26 4
gpt4 key购买 nike

考虑一个接受一个或多个参数(例如文件名)的函数。为了使其具有通用性,最好为通用迭代器范围编写它:

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));

但这个解决方案对我来说似乎很笨拙和浪费。

问题:是否有更好的低开销方法来创建单个变量的迭代器范围兼容表示?

最佳答案

您可以一次性使用指针:

function(&value, &value + 1);

在通用代码中,std::addressof 代替一元运算符 & 更安全,具体取决于您的偏执程度。

您当然可以将其包装在重载中以便于使用:

template <class T>
decltype(auto) function (T &&e) {
auto p = std::addressof(e);
return function(p, p + 1);
}

关于c++ - 将单个参数传递给需要迭代器范围的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50173785/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com