我有一个以下列格式返回的函数:
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
答案 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;
}