我们可以valarray
从一个基本的用户定义数组初始化 a,如下所示:
int arr[3]={0};
valarray<int> test(arr, sizeof(arr)/sizeof(int));
我们怎样才能反过来呢?假设我们有一个valarray<int>
并且我们需要转换回一个基本的用户定义数组?我在文档中没有找到任何东西。
valarray
您不能在不使用动态内存的情况下从 a 创建数组,因为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';
}
}