gpt4 book ai didi

c++ - 为什么 std::span 是一个指针 + 大小而不是两个迭代器

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:13:31 26 4
gpt4 key购买 nike

看起来 C++20 中的 std::span 的定义类似于

template<class T>
class span
{
T* begin;
size_t count;
};

而不是

template<class Iter>
class span
{
Iter begin;
Iter end;
};

哪个更通用(适用于 std::list、std::map 等)?

最佳答案

整点std::span<T>连续数据的 View 。 pair<T*, size_> (或类似的东西)是表示该观点的正确方法。你不能有 std::span那是对 std::list 的看法或 std::map ,所以想出一种表示它的方法是没有意义的。关键是要成为一种通用的词汇类型,只接受连续的数据。

也很重要span被有效地类型删除。 span<int>可以引用 int[20]vector<int>int[]在某处动态分配或 llvm::SmallVector<int>或...它来自哪里并不重要,您只有一种类型:“查看一些连续的 int s”。

pair<Iter, Iter> 是真的(或者,更一般地说,pair<Iter, Sentinel>)是一种更通用的表示,适用于更多容器。 C++20中也有这样的东西,叫做std::ranges::subrange<I, S> .但请注意,我们没有类型删除方面...... subrangemap<K, V>将具有与 subrange 不同的类型在具有相同 value_type 的不同容器上, 比如 list<pair<K const, V>>vector<pair<K const, V>>multimap<K, V> .

关于c++ - 为什么 std::span 是一个指针 + 大小而不是两个迭代器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56811430/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com