提问人:FalcoGer 提问时间:10/31/2023 更新时间:10/31/2023 访问量:66
如何从 std::chunk_by 返回值中获取单个块?
How to get individual chunks from std::chunk_by return value?
问:
我有以下 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;
}
哪个打印
[1, ]
[2, 2, 2, ]
[1, 1, 1, ]
[2, ]
[1, ]
不出所料。
但我只想说该列表()中的第二个条目。我该怎么做?[2, 2, 2, ]
chunks
我尝试使用 进行索引,但这给了我一个编译器错误,就像 一样。我试过了,但这也无法编译。我可以使用,但这很笨拙,肯定有更好的方法可以做到这一点。operator[]
at()
chunks.begin() + 1
| std::views::drop(1) | std::views::take(1)
正确的方法是什么?
答:
5赞
Jarod42
10/31/2023
#1
我试过了
chunks.begin() + 1
这仅适用于随机访问迭代器,
您必须改用 (or )。std::next(chunks.begin(), 1)
std::next(chunks.begin())
评论
|drop(1)|take(1)
我就是这样做的。std::next(chunks.begin(), 1)
(至于任何非随机存取迭代器)?std::next(chunks.begin())