6
我試圖使用Ranges-V3庫將一個容器值切片到一系列範圍內,以使相鄰範圍共享邊界元素。將分割範圍劃分爲重疊範圍
考慮以下幾點:
using namespace ranges;
std::vector<int> v = { 1, 2, 3, 0, 4, 0, 5, 0, 6, 7, 8, 0, 0, 9 };
auto myRanges = v | /* something like adjacent split */
for_each(myRanges, [](auto&& range){ std::cout << range << std::endl;});
我想的範圍內劃分成基於重疊子範圍的區域是否fullfills兩個標準:所述元件
- 是否具有零
- 的值或者與一個或多個值爲零的元素相鄰
所需的輸出:
[1,2,3]
[3,0,4,0,5,0,6]
[6,7,8]
[8,0,0,9]
我嘗試:
auto degenerate =
[](auto&& arg){
return distance(arg) < 2;
};
auto myRanges = v | view::split(0) | view::remove_if(degenerate);
for_each(myRanges, [](auto&& range){ std::cout << range << std::endl;});
輸出:
[1,2,3]
[6,7,8]
我茫然的我怎麼可能
- 「插入」 的範圍從3到6
- 「追加」 的範圍從8到9
你爲什麼通過移動參考?它會破壞你的數據 – Sugar
@Sugar我假設你指的是'auto &&'的使用以及'&&'暗示右值引用的印象。在這種情況下,該sigil並不意味着右值引用,而是Scott Meyer所稱的通用引用。查看更多(這裏)[https://isocpp.org/blog/2012/11/universal-references-in-c11-scott-meyers] – apmccartney
[Here](https://isocpp.org/blog/2012/11/universal-references-in-c11-scott-meyers)是apmccartney鏈接的工作版本。 –