Fal*_*Ger 2 c++ std-ranges c++23
我有以下 c++23 代码,它使用gcc-13.2.
#include <iostream>
#include <ranges>
#include <vector>
auto main() -> int
{
using std::cout;
std::vector<int> v{1,2,2,2,1,1,1,2,1};
auto chunks = v | std::views::chunk_by(std::equal_to{});
for (auto chunk : chunks)
{
cout << "[";
for (const auto& value : chunk)
{
cout << value << ", ";
}
cout << "]\n";
}
cout << std::flush;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
打印
[1, ]
[2, 2, 2, ]
[1, 1, 1, ]
[2, ]
[1, ]
Run Code Online (Sandbox Code Playgroud)
正如预期的那样。
但我只想获取该列表 ( [2, 2, 2, ])中的第二个条目chunks。我怎样才能做到这一点?
我尝试使用 进行索引operator[],但这给了我一个编译器错误,就像 一样at()。我尝试过chunks.begin() + 1,但也无法编译。我可以使用 | std::views::drop(1) | std::views::take(1),但这很笨拙,而且肯定有更好的方法来做到这一点。
这样做的正确方法是什么?
我试过
chunks.begin() + 1
这仅适用于随机访问迭代器,您必须使用std::next(chunks.begin(), 1)(或std::next(chunks.begin())) 代替。