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

извините, опечатка, я имел в виду struct – Mateusz

+1

Ну, это одна проблема исправлена. После определения 'struct' отсутствует точка с запятой,' str.values' неверно. Попробуйте скомпилировать ваш пример, прежде чем публиковать его. – Praetorian

ответ

2

Проблема заключается в том, что вы пытаетесь смешать объявления типов и переменных.

Вы, наверное, нужны какие-то using или typedef [или 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

Могу ли я спросить, почему вы использовали ++ i? Я вижу это очень часто для циклов, которые повторяются через векторы. На самом деле мне нужны индексы от 0 до размера-1 – Mateusz

+0

@Mateusz Какой компилятор и версия вы используете? Код выше [работает для меня] (http://coliru.stacked-crooked.com/a/d4e3da6df1cd3103). Прочитайте [этот ответ] (http://stackoverflow.com/q/24901/241631) для предварительного приращения против пошагового приращения. – Praetorian

Смежные вопросы