gpt4 book ai didi

c++ - 通过模板访问标准容器的迭代器

转载 作者:行者123 更新时间:2023-11-28 04:16:22 24 4
gpt4 key购买 nike

我想编写一个函数,它以标准容器开始和结束,将容器中的所有值添加到第三个参数。例如,如果我有

std::vector<int> my_ints{ 1, 2, 3 };
int sum_int = accumulate(my_ints.cbegin(), my_ints.cend(), 10); //should return 16.

我想以一种可以与任何标准容器一起使用的方式概括此功能。如何编写可以访问元素迭代器的模板?

template<typename It, typename T>
T accumulate(It begin, It end, T x)
{
for (It i = begin; i != end; ++i)
{
x = x + i;
}
return x;
}

这就是我目前的情况。但是,它无法编译,因为 x 和 i 不是同一类型。

最佳答案

您应该使用 std::for_each 来执行此操作,而不是编写您自己的函数。它将接受任何容器和任何范围的值。

如果您想编写自己的 for-range 语句:

template <typename C>
auto accumulate(const C& c) {
typename C::value_type x { };
for (auto value : c) {
x += value;
}
return x;
}
std::vector<int> my_ints{ 1, 2, 3 };
int sum = accumulate(my_ints);

关于c++ - 通过模板访问标准容器的迭代器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56511113/

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