You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++模板迭代器It::value_type如何兼容std::array等所有容器迭代器?

解决方案

核心是使用标准库提供的std::iterator_traits萃取迭代器的关联类型,该工具对原生指针类型做了特化适配,可同时兼容类类型迭代器和原生指针类型的迭代器。

具体修改点

将原代码中

typename It::value_type result{};

替换为

typename std::iterator_traits<It>::value_type result{};

同时需要在头文件区域引入<iterator>头文件。

修改后的完整可运行代码

#include <vector>
#include <iostream>
#include <array>
#include <iterator> // 新增iterator头文件

template <class It>
void print_accumulate(It first, It last) {
    typename std::iterator_traits<It>::value_type result{};
    while (first != last) {
        result += *first;
        ++first;
    }
    std::cout << result << "\n";
}

int main() {
    std::vector<size_t> v = {1, 2, 3, 4, 5};
    print_accumulate(v.begin(), v.end()); // 输出15

    std::array<size_t, 5> arr = {1,2,3,4,5};
    print_accumulate(arr.begin(), arr.end()); // 同样正常输出15
}

补充说明

如果使用C++20及以上版本,可以直接使用标准库提供的别名模板std::iter_value_t<It>简化写法,不需要写typename和冗长的traits前缀:

std::iter_value_t<It> result{};

内容的提问来源于stack exchange,提问作者Slugger

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 07:24:00