在结构

时间:2016-03-05 23:38:34

标签: c++ c++11 vector

我有一个结构

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

我的程序中有一个for循环,它通过这个向量中的值进行交互,这些代码可以工作:

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值。是否可以使用此解决方案?

2 个答案:

答案 0 :(得分:2)

您可以使用decltype

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

答案 1 :(得分: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++)
    {
    }
}