gpt4 book ai didi

c++ - 将 "dumb"函数重构为具有容器迭代器的通用 STL 样式

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:25:50 25 4
gpt4 key购买 nike

我已经设法了解了 C++ 的一些功能(for_each、映射函数、使用迭代器...),但是用于接收通用容器和迭代器的模板和函数参数列表的构造仍然让我难以理解。我有一个实际的例子,希望有人能为我说明:

采用以下函数处理传入的 std::vector 并构建进程的许多数据点/迭代的运行总和:

/* the for-loop method - not very savvy */
void UpdateRunningTotal (int_vec& total, int_vec& data_point) {
for (int i = 0; i < V_SIZE; i++) {
total[i] += data_point[i];
}
}

typedef int_vec std::vector<int>;
int_vec running_total (V_SIZE, 0); // create a container to hold all the "data points" over many iterations
/* further initialization, and some elaborate loop to create data points */

UpdateRunningTotal (running_total, iteration_data);
/* further processing */

上面的工作,但我更愿意有一个函数,它接受迭代器并执行这个求和。更好的是,有一个通用参数列表,其中包含推导的类型,而不是指定容器类型,即:

UpdateRunningTotal (iteration_data.begin(), iteration_data.end(), running_total.begin());

此时我真的迷路了,需要一点指导来找到如何定义模板和参数列表以使函数通用。模板和函数定义是什么样的?我已经熟悉使用 STL 功能执行此特定任务的方法 - 我正在寻找通用函数/模板定义的说明。

最佳答案

你可以使用 std::transformstd::plus :

std::transform(iteration_data.begin(), iteration_data.end(),
running_total.begin(), iteration_data.begin(), std::plus<int>());

在你的函数中,这将是:

template <typename Iter1, typename Iter2>
void UpdateRunningTotal(Iter1 pBegin, Iter1 pEnd, Iter2 pBegin2)
{
typedef typename std::iterator_traits<Iter1>::value_type value_type;

std::transform(pBegin, pEnd, pBegin2, pBegin, std::plus<value_type>());
}

关于c++ - 将 "dumb"函数重构为具有容器迭代器的通用 STL 样式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2991753/

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