Странное приращение итераторов при передаче их в качестве аргумента - PullRequest
0 голосов
/ 26 апреля 2018

Сразу прошу прощения за мой ужасный английский: D

Для моего проекта мне нужно проанализировать файл obj. Я построчно читаю файл и выбираю данные из определенной строки с помощью регулярных выражений.

regex regCoord("-?\\d+\.?\\d*");
sregex_iterator a(line.begin(), line.end(), regCoord);

Я точно знаю, что найдено 3 совпадения, и я хочу сразу их использовать. Например, вывод на консоль или сохранение в структуру

cout << line << endl;
cout << a++->str() << " " << a++->str() << " " << a->str() << endl;

Но в этом случае приращение происходит в обратном порядке, слева направо! И на выходе я получаю не (1-й элемент, 2-й элемент, 3-й элемент), но (2-й элемент, 1-й элемент, 1-й элемент). Аналогичная проблема возникает, если я передаю все три элемента конструктору структуры.

Output:
v 0.151164 0.014830 -0.051720
0.014830 0.151164 0.151164

Но если я прокручиваю элементы или записываю вывод в три строки, результат будет выглядеть нормально. Аналогично, если я заполняю структуру без использования конструктора и пишу в каждое из ее полей отдельно.

cout << a++->str() << " ";
cout << a++->str() << " ";
cout << a->str() << endl;

Output:
v 0.151164 0.014830 -0.051720
0.151164 0.014830 -0.051720

Почему может быть такая странная перевернутая обработка аргументов? Я использую Visual Studio 2017

...