10得票1回答
为什么std::span是一个指针+大小而不是两个迭代器?

看起来 C++20 中的 std::span 定义类似于 template<class T> class span { T* begin; size_t count; }; 而不是template<class Iter> cla...

16得票1回答
C++允许在一个span是另一个span的子span时进行std::span::iterators之间的比较吗?

一般来说,C++不允许比较不同容器之间的迭代器。例如: int main() { std::vector<int> v = {1, 2, 3}; std::vector<int> w = {4, 5, 6}; std::cout << v.en...

8得票1回答
为什么我不能使用迭代器构建std::span?

考虑一个大内存容器。在这个简单的例子中,使用了一个 std::vector<int>: std::vector v = { 0, 1, 2, 3, 4, 5 }; std::span 允许我创建一个轻量级的内存视图。现在我想简单地打印这个span: template<...

11得票1回答
返回条件性的`range_expression`

根据某些条件,迭代已知范围中的一个最有效的方法是什么? 二进制条件的伪代码: for element in (condition ? range_a : range_b) // do work 这个“示例”展示了我使用基于范围的for循环的意图,但由于std::initialize...

7得票1回答
什么是mdspan,它用于什么?

在过去的一年左右,我注意到StackOverflow上有一些与C++相关的答案提到了`mdspan`,但实际上我从未在C++代码中见过这些。我尝试在我的C++编译器的标准库目录和C++编码指南中寻找它们,但没有找到。我倒是找到了`std::span`,我猜它们可能是相关的,但具体是什么意思呢?...

7得票1回答
从C字符串数组创建string_view范围

给定一个函数void func(std::span<std::string_view>),如何以最有效的方式向该函数提供一个原始的C字符串数组const char**? 据我所知,由于可以从C字符串构造std::string_view,并且可以从指针+大小构造std::span,...

12得票3回答
为什么我在函数中更倾向于传递 std::span 而不是 std::vector&?

我知道这可能与问题“什么是“span”,何时应该使用它?”有重叠,但我认为对于问题的这个特定部分的答案相当令人困惑。一方面,有这样的引用: 如果你有一个你知道适合你的代码的标准库容器(或者Boost容器等),就不要使用它。它不打算取代它们中的任何一个。 但在同一个答案中,出现了这样的陈...

21得票2回答
跨度是否传播const?

标准容器传递const。也就是说,如果容器本身是const,它们的元素将自动成为const。例如:const std::vector vec{3, 1, 4, 1, 5, 9, 2, 6}; ranges::fill(vec, 314); // impossible const std::l...

16得票1回答
为什么span的数组和std::array的构造函数与其容器构造函数不同?

我一直在使用clang trunk和libc ++在Godbolt上尝试最新版本的 std::span 规范,并发现其中一些构造函数令人困惑。 特别是,我发现来自普通数组和std :: array 的构造函数与其他容器不同。 例如,以下代码似乎可以编译:std::vector<int...

9得票2回答
为什么std::span缺少size_type?

我一直在更新旧代码,使用更符合 C++20 标准的 std::span 替换我的自制 span 类。但是我遇到了编译错误,因为 std::span 没有 size_type,而是使用 index_type。关于是否将 index_type 设为有符号数,已经引起了巨大的争议,但为什么要跳过 s...