std::valarray和std::array之间有什么区别
What is the difference between std::valarray and std::array
valarray
类和array
类看起来一样,你能解释一下我更喜欢valarray
而不是array
吗?
valarray
已经在C++03中,array
在C++11中是新的valarray
是可变长度,array
不是valarray
是为数值计算而设计的,提供了大量的运算,包括+
、-
、*
、cos
、sin
等。array
没有valarray
有一个接口来检索阵列(子阵列)的切片,而array
没有
valarray
是一个动态数据结构,其大小可以在运行时更改,并执行动态分配。array
是一个静态数据结构,其大小在编译时确定(也是一个聚合)。
不过,不要使用valarray
;只需使用CCD_ 21即可。
与std::valarray<T>
相关的类模板旨在支持称为表达式模板的优化技术。我还没有尝试过这样做,但我的理解是规范并没有完全要求这样做,也没有充分支持这一点。一般来说,std::valarray<T>
是一个相当专业化的类,它并没有得到广泛的使用。此外,我认为std::valarray<T>
的模板参数支持是一个有限的集合(例如,数字内置类型)。
另一方面,std::array<T, n>
是一个固定大小的数组,在固定大小的情况下,尽可能支持正常的容器接口。从本质上讲,std::array<T>
是T[n]
的一个更方便使用的版本。
相关文章:
- 这个语法std::class<>{}(arg1, arg2) 在C++中是什么意思?
- "using namespace std;"在C++的作用是什么?
- 传递给std::function template的template参数究竟代表什么
- "std::unique_XXX"命名约定背后的基本原理是什么?
- 什么是 std::exception::what() 以及为什么要使用它?
- C++如果必须在编译时确定大小,std::array 有什么意义?
- 当我们进行一些操作时,应该使用什么'std::string'或'std::stringstream'?
- 如果 KEY 是 std::list 或 std::vector 而不是值,那么 std::map 的默认行为是什么?
- 当 std::move 与 C 样式数组或不移动对象时会发生什么
- 什么是自动 t1=std::make_tuple(case1==case2,整数)的值
- C++std::atomic在程序员级别保证了什么
- 当为可变性配置时,boost::heap::d_ary_heap 保留的额外 std::list 的目的是什么?
- 引用 std::any 或 not_yet_in_std::whatever 的惯用方式是什么?
- 在什么条件下使用 std::memcpy 在对象之间复制是安全的?
- 在自定义 std::vector-like 容器中处理指针和非指针模板类型的最佳方法是什么?
- 在 C# 中等效的 std::rotate() 是什么?
- 什么是 std::function::argument_type 的替代品?
- 什么是 std::jthread 在 c++20 中?
- std::enable_if 和 std::enable_if_t 有什么区别?
- "owned pointer"和 std::shared_ptr 的"stored pointer"有什么区别?