Почему вывод диапазона (vdata) не дает мне полный список пар? - PullRequest
0 голосов
/ 03 апреля 2019

Я изучаю базовое использование range-v3 (https://github.com/ericniebler/range-v3).

Когда я использую view :: tokenize для «разбора» некоторого вектора строк, некоторые совпадения не совпадают с окончательным результатом, но внутри функции преобразования вывод верен, даже когда я возвращаю то же представление, что и я м в конце.

Я проверял это с for_each и yield_from / yield с теми же результатами.

проверил вопросы реализации на странице github, но я не нашел ничего связанного с этим.

#include <iostream>
#include <range/v3/all.hpp>
#include <string>

int main() {
  std::vector<std::string> data = {{"1.1;2.2;3.3;4.4;5.5;6.6"},
                                   {"0.1;0.2;0.3;0.4;0.5;0.6"},
                                   {".1;.2;.3;.4;.5;.6"}};

  auto rgx = std::regex{"[\\d]*[.][\\d]+"};

  auto to_double = [](auto a) { return stod(a.str()); };

  auto vdata = data | ranges::view::transform([&](auto s) {
                 auto p = s | ranges::view::tokenize(rgx) |
                          ranges::view::transform(to_double);
                 std::cout << "\n" << p << "*\n";
                 return p;
               });

  std::cout << vdata;

  return 0;
}

выход:

$ clang++ -std=c++1z -I./deps/range-v3/include -O0 -g src/main.cpp -o mil 
$ ./mil                                                                                                        
[
[1.1,2.2,3.3,4.4,5.5,6.6]*
[3.3,4.4,5.5,6.6],
[0.1,0.2,0.3,0.4,0.5,0.6]*
[0.3,0.4,0.5,0.6],
[0.1,0.2,0.3,0.4,0.5,0.6]*
[0.4,0.5,0.6]]                                                                                                                                                

Я ожидал, что представления, помеченные * (напечатанные при возврате из функции преобразования), будут идентичны представлениям в следующей строке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...