我正在学习range-v3(https://github.com/ericniebler/range-v3)的一些基本用法。
当我使用view :: tokenize来“解析”某些字符串向量时,某些匹配项从最终结果中消失了,但是在transform函数内部,输出是正确的,即使Im返回与我相同的视图m显示在末尾。
我用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]]
我希望标有*(从转换函数返回时打印)的视图与下一行相同。