问题标签 [valarray]

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.

0 投票
3 回答
92 浏览

c++ - 运算符 += 应用于 std::valarray

这是示例:

我不明白这个错误,如果有人可以向我解释。

有解决方法吗?

此致,

0 投票
1 回答
557 浏览

c++ - 为什么 std::vector 和 std::valarray 初始化构造函数不同?

我刚刚被下面的东西烧了。

如果我想用一个常量初始化一个元素,std::vector我这样做:nX

但是如果我需要用一个常量初始化一个元素,std::valarray我需要交换大小和初始化常量:nX

在我看来,这似乎是一个任意的“陷阱”。

std::vector在决定填充构造函数参数的顺序时,标准委员会是否提供了技术原因或一些设计原理std::valarray

0 投票
1 回答
51 浏览

c++ - 为什么 std::valarray 不是算术的?

我注意到std::is_arithmetic<std::valarray<float>>评估为false. 不是 valarrays 的全部意义在于促进重载标量代码以“自动矢量化”而不求助于 boost 等?

为什么它不继承其模板类型的算术属性?

我的问题不一定是问题,而是我的基本误解,因为如果这确实是有意的,我一定会错过一些哲学见解。

0 投票
1 回答
89 浏览

c++ - 将 slice_array 分配给另一个 slice_array 是否正确?

运行代码,我得到:

我只是想知道是否s1 = s2正确使用?

如果使用正确,那么可以肯定地说这是我的旧版本 LLVM C++ 库的错误吗?

0 投票
0 回答
43 浏览

c++ - 为什么我会得到不同的 mask_array 分配行为?

测试上面的代码,我得到了

据我了解,这两个结果都是错误的。

orig[3]=orig[2] //orig[2] 为 2,所以 orig[3] 为 2

orig[4]=orig[3] //orig[3]从上一步设置为2,所以orig[4]设置为2。

...

所以我的问题是:

  1. 为什么我从 test1 和 test2 得到不同的输出?test1 和 test2 应该给出相同的结果吗?
  2. 两个输出都错了吗?如果不是,为什么?
  3. 对于test2,原始数组似乎没有更新。为什么?它是一个错误吗?

我使用了一个非常旧的编译器和 llvm c++ 库,尝试找出它是否是一个错误或者我理解/使用 mask_array 错误。

请分享您的想法。感谢您的任何评论。

0 投票
0 回答
40 浏览

c++ - 使用 c++ gslice 隐藏 valarray 中的特定元素

我想隐藏valarray<int>从 0 开始的连续整数的 a 中的多个元素。例如, from {0, 1, 2, 3, 4, 5}to {0, 2, 3, 5}。我发现我可以用indirect array. 指定元素索引valarray<size_t>。但是,我不知道如何生成我想要的复杂valarray<size_t>索引。复杂性或最多复杂性对我来说非常重要。所以,我认为也许能够解决问题,但我仍然无法弄清楚如何实现它。O(1)O(1)O(logn)gslice

注意:我使用c++11

0 投票
1 回答
119 浏览

c++ - std::begin 是空的 std::valarray 未定义行为吗?

我在玩std::valarrayUndefinedBehaviorSanitizer,并注意到std::beginstd::valarray会导致未定义的行为。这是代码:

要重现,编译代码g++ -fsanitize=undefined并运行结果可执行文件。

这是libstdc++std::begin的实现。

似乎_val[0]为空 s 创建了一个空值引用,std::valarray这会导致未定义的行为。

这是来自 libstdc++ 的错误吗?

0 投票
2 回答
1136 浏览

c++ - 错误:将“操作员*”声明为非功能

我对模板类的绑定模板友元函数有一些问题。我参考了与我有类似和简单问题的页面:vect.hpp:13:33: error: declaration of 'operator<<' as non-function ,但我仍然感到困惑,问题无法解决。这是我的代码:

WSL2 (Ubuntu 9.3.0-17ubuntu1~20.04)我在using中编译并运行它gcc version 9.3.0,我得到了一系列错误,如下所示:

0 投票
1 回答
313 浏览

c++ - 为什么 std::valarray 没有 std::data() 重载?

引入了 C++11std::begin(std::valarray&)以及std::end(std::valarray&).

C++17 引入了std::data()它与std::vector, std::array, C 样式数组等一起使用。但是为什么没有为std::data()引入重载std::valarray呢?

std::valarray被指定为具有连续存储,可以通过获取地址来访问a[0](参见注释)。

std::data(std::valarray& a)可以简单地定义为 return &(a[0])。为什么没有做到这一点?是疏忽吗?

我的动机是我正在开发一个通用的序列化库。当它从源(例如 CBOR)接收到连续的二进制数数组时,它会检测目标容器是否具有重载data(container)函数、container.resize(n)成员函数以及适当的value_type(匹配原始数字类型)。这三者的存在使得memcpy()将源数据直接有效地直接放入目标容器成为可能。如果有std::data(std::valarray&)超载,我的生活会更简单。缺少它并不是一个阻碍,但它确实使代码更加混乱。


附录:我想检测一个data函数的原因是它告诉我目标容器是连续的。如果它是连续的,那么我可以进行有效的字节复制(通过std::memcpystd::copy无关紧要)。如果它不连续,那么我必须一次解压缩每个未对齐的源数组第一个,并根据容器类型使用push_back,等将其附加到目标容器。emplace


附录 2:我决定使用适配器和特征方法,而不是检测data函数的存在。这将使支持非标准或用户定义的容器类型变得更加容易。我的问题是为什么没有std::data(std::valarray& a)静止的立场。


附录 3:我应该澄清我需要为 CBOR 类型的数组做这个hackery,它只能是数字。此外,源缓冲区中的数字未与元素边界对齐。我知道二进制数据可能需要字节序交换,如果不小心处理,将字节复制到浮点类型可能会触发奇怪的 NaN 行为。

我现在后悔提到我的动机,应该让这个std::data(std::valarray& a)问题独立存在。这个问题已经变成了什么样的火车残骸,哈哈。:-)

0 投票
1 回答
72 浏览

c++ - 有没有更好的方法来实现成员函数 row() 的 const 版本而不使用 const_cast?

该示例来自使用std::slicestd::slice_array的演示:

https://en.cppreference.com/w/cpp/numeric/valarray/slice

https://en.cppreference.com/w/cpp/numeric/valarray/slice_array

我应该如何正确定义成员函数 row() 的 const 版本?以下代码编译但它使用const_cast。如果您能提出任何建议,我将不胜感激。

如果成员函数定义如下:

然后产生以下错误消息:

测试:macOS Catalina;苹果 clang 版本 11.0.3 (clang-1103.0.32.29)