我试图将一个数组复制到一个 vector ,但是,当数据被复制到 vector 时,它与原始数组的数据不同。
int arraySize = 640000;
std::vector<unsigned char> vector_buffer;
unsigned char buffer[arraySize];
populateArray(&buffer);
for(int i = 0; i < arraySize; i++)
cout << buffer[i]; // this prints out data
std::copy ( buffer, buffer + arraySize, std::back_inserter(vector_buffer));
for(int i = 0; i < arraySize; i++)
cout << vector_buffer[i]; // this prints out different data
数据似乎以某种方式被压缩了。将数组复制到 vector 的任何方法都会做同样的事情。
我用它从图像创建视频。如果我使用数组数据,一切都很好,但如果我使用 vector 数据,它就不起作用。
如有任何帮助,我们将不胜感激。
干杯
最佳答案
int arraySize = 640000;
必须是 const
在标准 C++ 中。 g++ 允许可变长度数组作为受 C99 启发的语言扩展。最好关闭该扩展程序。 :-)
std::vector<unsigned char> vector_buffer;
unsigned char buffer[arraySize];
确定 arraySize
是const
,但不会用例如编译带有原始代码的 Visual C++。
populateArray(&buffer);
这很可能是 populateArray(buffer)
, 除非你有一个非常奇怪的 populateArray
声明.
for(int i = 0; i < arraySize; i++)
cout << buffer[i]; // this prints out data
上面打印的数据没有元素之间的间距。最好加点间距。或换行符。
std::copy ( buffer, buffer + arraySize, std::back_inserter(vector_buffer));
最好只使用 assign
std:.vector
的方法| , 比如 vector_buffer.assign( buffer, buffer + arraySize )
.
for(int i = 0; i < arraySize; i++)
cout << vector_buffer[i]; // this prints out different data
同样,这显示元素之间没有间距。
当您修复这些问题后,明显的问题是否仍然存在?
如果是这样,请同时发布您的 populateArray
功能。
关于C++ 数组到 vector 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3926340/