2016-04-30 54 views
2

我有下面的格式返回函數如何循環值:時的std ::矢量::數據給出

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 
+7

您不能,因爲您不知道有多少元素需要迭代。 – juanchopanza

+0

有道理,只有當我知道有多少變量時,纔可以構建迭代器 – letsBeePolite

回答

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; 
}