如何使用基本类型uint8_t *的std :: iterator?

时间:2018-02-26 08:43:49

标签: c++ iterator bitcoin

在比特币核心C ++实现中,code使用std::reverse_iterator<const uint8_t*>遍历uint8_t数组。

请参阅下面的简化代码以及pastebin

#include <stdint.h>
#include <iterator>
#include <iostream>

using namespace std;
uint8_t data[8] = {0, 1, 2, 3, 4, 5, 6, 7};

template<typename T>
void HexStr(const T itbegin, const T itend)
{
    for (T it = itbegin; it < itend; ++it)
    {
        cout << +*it << " ";
    }
    cout << endl;
}

int main()
{
    HexStr(reverse_iterator<const uint8_t*>(data + sizeof(data)),
           reverse_iterator<const uint8_t*>(data));

    return 0;
}

我的问题是为什么使用常规迭代器(std::iterator<const uint8_t*>)不能完成相同的 - 编译器错误是error: wrong number of template arguments (1, should be at least 2)

请参阅此pastebin中的失败代码。

可以在此处在线复制和编译代码:http://www.compileonline.com/compile_cpp11_online.php

1 个答案:

答案 0 :(得分:2)

std::reverse_iterator将原始迭代器类型作为模板参数。

因此,您要查找的类型为const uint8_t*,而不是std::iterator<const uint8_t*>another thing altogether)。