gpt4 book ai didi

c++ - 函数中输出容器默认值的开始

转载 作者:搜寻专家 更新时间:2023-10-31 00:11:31 25 4
gpt4 key购买 nike

我有以下减速功能:

template<class Tinput_iterator, class Toutput_iterator>
int foo(const Tinput_iterator& begin_input, const Tinput_iterator& end_input, Toutput_iterator& begin_output);

数据容器的beginend(begin_input & end_input)是必须的。但是,输出容器的 begin(end_input) 是可选的。

在这种情况下,我应该用什么代替 XXX:

template<class Tinput_iterator, class Toutput_iterator>
int foo(const Tinput_iterator& begin_input, const Tinput_iterator& end_input, Toutput_iterator& begin_output = XXX);

编辑:

例如,如果 begin_output 是这样传递的:

std::vector<int> bar(data.size());
auto result=foo(begin(data),end(data),begin(bar));

result 将包含一个整数

bar 将包含 100 个 integers 值。

如果这样调用:

auto result=foo(begin(data),end(data)/*,begin(bar)*/);

result 将包含一个 integer(同上)

当然没有bar也不会存储任何东西

最佳答案

最明显的解决方案是使用默认构造迭代器作为默认值

template<class Tinput_iterator, class Toutput_iterator = void*>
int foo(Tinput_iterator begin_input, Tinput_iterator end_input, Toutput_iterator begin_output = {});

顺便说一下,这完全取决于 Toutput_iterator 的定义方式。如果迭代器是按照标准库迭代器的方式设计的,那就没问题了。它也适用于指针(默认值为 nullptr)。

请注意,我已经从 foo 的参数声明中删除了引用。这是因为迭代器通常设计为按值传递。

关于c++ - 函数中输出容器默认值的开始,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33802717/

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