2016-03-05 84 views
-3

我有一個結構訪問向量的SIZE_TYPE一個結構

struct str{ 
std::vector<double> values; 
}; 

而且我有一個在我的程序循環,通過價值觀在這個載體interates和這些代碼在裏面工作:

str s; 
for (std::vector<double>::size_type i = 0; i < s.values.size(); i++) { 

for (size_t i = 0; i < s.values.size(); i++) { 

,但我知道它應該以某種方式做喜歡這裏,但我有一個錯誤。如何獲得這個大小?

for (str::values::size_type i = 0; i < s.values.size(); i++) { 

而且我知道,我可以用

for (auto i : str.values) 

,但我還需要迭代的次數,不僅double是在vector值。有沒有可能使用這種解決方案?

+0

什麼是'structue'? – Praetorian

+0

對不起,打字錯誤,我的意思是結構 – Mateusz

+1

那麼,這是一個問題修復。 'struct'定義後面缺少分號,'str.values'不正確。嘗試在發佈之前編譯您的示例。 – Praetorian

回答

2

的問題是,你要混合類型聲明和變量。

你可能需要某種形式的usingtypedef [或decltype爲對方回答說],以避免必須知道什麼是values

這編譯:

#include <vector> 
struct str{ 
    using Storage = std::vector<double>; 
    Storage values; 
}; 

int main() 
{ 
    str s; 
    for(str::Storage::size_type i = 0; i < s.values.size(); i++) 
    { 
    } 
} 

至於做這個的:

#include <vector> 

struct str{ 
    typedef std::vector<double>::size_type size_type; 
    std::vector<double> values; 
}; 

int main() 
{ 
    str s; 
    for(str::size_type i = 0; i < s.values.size(); i++) 
    { 
    } 
} 
2

你可以使用decltype

str s; 
for (decltype(str::values)::size_type i = 0; i < s.values.size(); ++i) 
{} 
+0

然後我得到一個錯誤:「字段值必須是靜態的」 – Mateusz

+0

請問爲什麼你使用++我?我經常在循環中看到它遍歷矢量。其實我需要從0到1的索引 – Mateusz

+0

@Mateusz你使用的是什麼編譯器和版本?上面的代碼[適用於我](http://coliru.stacked-crooked.com/a/d4e3da6df1cd3103)。閱讀[這個答案](http://stackoverflow.com/q/24901/241631)前增量與後增量。 – Praetorian