我有一个包含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());
但是它在平台上工作,uint32_t和int本质上是相同的类型。
这样做的最佳方法是确保它与平台无关,并且可以在任何平台上运行,例如int不是32位吗?
答案 0 :(得分:10)
如果您正在寻找一种可移植的方式来复制数据,那么我会使用std::copy
std::copy(in.begin(), in.end(), std::begin(out));
如果你想反过来并将一个数组复制到一个向量中,那么你可以使用带有两个迭代器的向量构造函数:
some_type array_name[some_size];
std::vector<some_type> vector_name(std::begin(array_name), std::end(array_name));
如果你想将数组添加到已经存在的向量中,那么可以使用std::vector::assign
来代替向量的内容
some_type array_name[some_size];
vector_name.assign(std::begin(array_name), std::end(array_name));
如果要保留向量的内容并将数组的内容附加到向量中,则可以使用带有std::back_inserter
的副本
some_type array_name[some_size];
std::copy(std::begin(array_name), std::end(array_name), std::back_inserter(vector_name));
答案 1 :(得分:1)
std::vector<int32_t> in=getdata();
std::vector<int> out( in.begin(), in.end() );
然后,您可以out
作为数组访问out.data()
。