如何在给出std :: vector :: data时迭代值

时间:2016-04-30 15:08:56

标签: c++ c++11

我有一个以下列格式返回的函数:

 const value_type* data() const { return data_.data(); } 

在通话地点放置。我试图迭代价值观。但是当给出指向由向量内部使用的数组中的第一个元素的指针时,无法想象如何获得迭代器。

致电方:

for (auto y:X.data()) std::cout << y << " " <<std::endl;

但是得到了

error: invalid range expression of type 'const int *'; no viable 'begin' function available

1 个答案:

答案 0 :(得分:2)

如果您提供X::begin()X::end()函数,则可以迭代元素。

这是一个例子。我已经对提议的代码段进行了评论,并将其替换为可行的替代方案:

#include <iostream>
#include <vector>

using value_type = int;

class X {
public:
    using my_iterator = const std::vector<value_type>::iterator;

    //const value_type* data() const { return data_.data(); }
    my_iterator begin() { return data_.begin(); }
    my_iterator end() { return data_.end(); }

private:
    std::vector<value_type> data_{1,2,3,4,5,6,7};

};


int main()
{
    X x{};

    //for (auto y:X.data()) std::cout << y << " " <<std::endl;
    for (auto y:x) std::cout << y << " " <<std::endl;

    return 0;
}