问题标签 [std-span]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - 为什么 C++20 知道如何散列 string_view,但不知道如何散列 span?
我最好的猜测是,委员会要么忘记了这个用例,要么不想使用概念/要求将span
类型限制为可以安全散列的东西(POD,无填充),或者他们不想要一半的解决方案(等待反射)...
如果有人对这里感兴趣,godbolt链接带有无用的错误消息和代码,但我认为我的问题很清楚,没有任何代码。
注意:我知道在散列方面缺少 C++std::
库,例如它不能散列std::pair<int,int>
,但我的问题特别是关于std::span
.
c++ - std::span 迭代器可以比创建它们的 span 对象更长寿吗?
换句话说,std::span
在 span 实例被销毁后,迭代器是否失效?
我有一个需要用不同布局迭代的向量。我试图std::span
避免编写大量迭代器样板文件或引入外部库依赖项。简化示例:
c++ - 无法满足 C++ 范围要求自定义容器
我一直在尝试编写一个带有自己的迭代器的自定义容器,它可以用作范围和带有std::span
. 我是新手,所以请善待。
以下示例无法编译,因为我的容器类无法转换为 std::span
抱歉,这是一个很长的最小示例,但我的理解是自定义迭代器需要提供所有适当的功能才能使用std::span
.
我从 clang 得到的编译错误是
或者来自 VS2019
Clang 最初给我的错误是关于不满足所有各种范围类型的要求,包括输入和输出范围,它指的是 _Begin。但是当我将代码剥离回这个例子时,消息变得不那么详细了。
这让我认为我的迭代器有问题。如果不是返回我的自定义迭代器,而是返回一个原始指针,那么代码编译得很好。
有没有办法弄清楚为什么我的代码不起作用?我什至都在努力寻找一个合适的指南,这对于那些刚接触范围的人来说是可以理解的。
c++ - 如何使类与采用范围的 std::span 构造函数兼容?
我希望能够将我的自定义容器传递给这个std::span
构造函数:
我需要向我的自定义类添加什么以使其满足能够将其传递给std::span
接收范围的构造函数的要求?
例如,std::vector
我们能够做到这一点:
我已经将这些添加到我的自定义类中:
...这反过来又允许我使用基于范围的循环,std::data(my_container)
以及std::size(my_container)
. 我错过了什么,以便我也可以将我的容器传递给std::span
构造函数?是否需要实现更复杂的迭代器?
c++ - 在 push_back 被称为未定义行为之后,将 std::span 用于 std::vector
我的理解std::span
是它本质上包含指向容器的指针、大小和一些有用的成员函数。
如this question所示,我可以采用一个向量的跨度。
如果我将条目添加到向量的末尾,则可能需要调整向量的大小。调整矢量大小时,会发生以下步骤(顺序不重要)。
在具有更多空间的堆上分配了一个新数组。
向量中的条目被移动到新数组中。
到's 数组
ptr
的成员更改为新数组的开头。vector
vector
旧数组被释放。
span
如果vector
' 的数组需要重新分配并变大,会发生什么情况吗?是否在未定义的行为上调用了span
into a vector
after ?push_back
vector
c++ - 是否有传递向量的通用模式作为跨度?
我认为不需要分配一个缓冲区来保存 string_views 的跨度。所以可能是中间人std::vector<std::string_view>
?有什么好的整体模式可以将其压缩到 1 行吗?如有必要,哪种助手/实用程序最好?
c++ - 在哪里使用 std::span?
我想编写一个可以从其调用站点接受任何类型的连续缓冲区(例如,原始数组等)std::array
的函数std::vector
。我想出了两种方法。
方法#1:
这里,expectedTokenCount
是将插入到buffer
.
方法#2:
在这种方法中,我认为我最好以一种首先检查通buffer
孔大小buffer.size( )
并与之比较expectedTokenCount
以确保其容量大于或等于的方式编写函数,expectedTokenCount
否则会引发某种异常。这是比第一种方法更有效且更安全的方法吗?哪一个更好?如果将向量传递给它,它的行为span
及其成员函数会改变还是与数组相同?size
c++ - 如何传递一个空的 span 对象?
有没有办法将空std::span<int>
传递给函数?
我有如下功能:
而且我想将其更改为使用std::span
而不是,std::vector
以便它也可以获取std::array
原始数组作为其参数。
现在在这里:
是否也std::span
正确支持所有连续的容器(例如std::vector
,std::array
等)?