将vector <int32_t>转换为int []的最佳方法是什么?

man*_*ans 0 c++ vector

我有一个持有int32_t的向量,我正在使用Windows 64位.我需要将它转换为int数组.

因为在我的特定平台上int32_t和int本质上是相同的类型,我可以这样做:(假设该数组有足够的空间来容纳来自vector的所有数据)

 int out[1000]; //assuming that in has less data than 1000 
 std::vector<int32_t> in=getdata();
 memcpy(out,&int[0],in.size());
Run Code Online (Sandbox Code Playgroud)

但它适用于平台,uint32_t和int本质上是相同的类型.

这样做的最佳方法是什么,以确保它是独立于平台的,并且可以在任何平台上工作,例如int不是32位?

Nat*_*ica 10

如果您正在寻找一种可移植的方式来复制数据,那么我会使用 std::copy

std::copy(in.begin(), in.end(), std::begin(out));
Run Code Online (Sandbox Code Playgroud)

如果你想反过来将数组复制到向量中,那么你可以使用带有两个迭代器的向量构造函数:

some_type array_name[some_size];
std::vector<some_type> vector_name(std::begin(array_name), std::end(array_name));
Run Code Online (Sandbox Code Playgroud)

如果您想将数组添加到现有的向量中,那么您可以使用std::vector::assign它将使用数组替换向量的内容

some_type array_name[some_size];
vector_name.assign(std::begin(array_name), std::end(array_name));
Run Code Online (Sandbox Code Playgroud)

如果你想保留向量的内容并将数组的内容附加到向量中,那么你可以使用带有的复制 std::back_inserter

some_type array_name[some_size];
std::copy(std::begin(array_name), std::end(array_name), std::back_inserter(vector_name));
Run Code Online (Sandbox Code Playgroud)

  • @JoshKelley但是这样,`out`的类型变得可以互换,即你可以切换到`std :: array out`而无需进一步更改. (2认同)