2016-03-05 83 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