将valarray转换为基本阵列
Convert valarray to basic array
我们可以从基本用户定义的数组初始化valarray
如下:
int arr[3]={0};
valarray<int> test(arr, sizeof(arr)/sizeof(int));
我们如何以另一种方式移动?假设我们有一个valarray<int>
,我们需要转换回基本的用户定义的数组?我没有在文档中找到任何东西。
您不能在不使用动态内存的情况下从valarray
创建数组,因为valarray
对象的大小在编译时不知道。
std::valarray<int> test{10, 20};
int arr[test.size()]; // Not standard C++. Some compilers support this
// as an extension.
// This is how you can get a dynamic array from a valarray.
int* arr = new int[test.size()];
std::copy(begin(test), end(test), arr);
最好使用std::vector<int>
,而不是尝试在应用程序代码中管理动态分配的内存。
std::vector<int> arr(begin(test), end(test));
我们如何以另一种方式移动?
如果您知道valarray
在编译时的大小,则可以准备int[3]
并将值复制到单个元素,例如使用std::copy
:
#include <valarray>
#include <algorithm>
#include <iostream>
int main()
{
std::valarray<int> va { 1, 2, 3 };
int arr[3] = { 0 };
std::copy(begin(va), end(va), arr);
std::cout << arr[0] << 'n';
std::cout << arr[1] << 'n';
std::cout << arr[2] << 'n';
}
您甚至可以立即使用正确值初始化数组:
#include <valarray>
#include <iostream>
int main()
{
std::valarray<int> va { 1, 2, 3 };
int arr[] = { va[0], va[1], va[2] };
std::cout << arr[0] << 'n';
std::cout << arr[1] << 'n';
std::cout << arr[2] << 'n';
}
如果在编译时不知道大小,请改用std::vector
:
#include <valarray>
#include <vector>
#include <iostream>
int main()
{
std::valarray<int> va { 1, 2, 3 };
std::vector<int> v(begin(va), end(va));
for (auto const& element : v)
{
std::cout << element << 'n';
}
}
只要Valarray的大小不变,您就可以将第一个元素的地址用作基本数组的开始。
#include <valarray>
#include <iostream>
int main() {
int a[] = {1, 2, 3};
std::valarray va(a, 3);
std::cout << a[0] << ',' << a[1] << ',' << a[2] << 'n';
std::cout << va[0] << ',' << va[1] << ',' << va[2] << 'n';
int *b = &va[0];
std::cout << b[0] << ',' << b[1] << ',' << b[2] << 'n';
}
相关文章:
- OpenMP阵列性能较差
- 如何将三维尺寸不固定的三维阵列展平为一维阵列
- 为什么std::valarray不是算术的
- 当我的阵列太大时出现分段错误
- 位阵列上的快速AND运算
- 为什么std::vector和std::valarray初始化构造函数不同
- 阵列必须使用大括号封闭的初始器进行初始化
- 没有从阵列<float>到阵列<int>的可行转换
- C++动态安全 2D 交错阵列
- 将平面阵列重塑为复杂的特征类型
- 如何使用英特尔 PIN 捕获阵列的所有负载?
- 为什么我能够为阵列分配比计算机实际拥有的内存更多的内存
- 库特<<恩德尔;不适用于打印 2D 阵列
- 数组类 阵列的打印输出
- glibcxx STL 在实现 std::valarray::sum() 时是否不正确?
- 从较小的阵列到较大的阵列的元素级转换
- 仅在大型阵列上出现合并排序分段错误
- 从阵列C++中删除重复项
- 阵列的大小在C++中是否灵活?
- 将valarray转换为基本阵列