我试图将数组复制到矢量,但是,当数据被复制到矢量时,它与原始数组的数据不同。
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
数据似乎以某种方式被压缩。将数组复制到向量的任何方法都可以做同样的事情。
我用它来创建图像视频。如果我使用数组数据一切都很好,但如果我使用矢量数据它不起作用。
任何帮助都将受到高度赞赏。
干杯
答案 0 :(得分:9)
在
int arraySize = 640000;
在标准C ++中需要const
。 g ++允许可变长度数组作为C99启发的语言扩展。最好关闭该扩展程序。 : - )
std::vector<unsigned char> vector_buffer;
unsigned char buffer[arraySize];
当arraySize
为const
时确定,但不会使用例如populateArray(&buffer);
进行编译使用原始代码的Visual C ++。
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
的{{1}}方法,例如vector_buffer.assign( buffer, buffer + arraySize )
。
for(int i = 0; i < arraySize; i++)
cout << vector_buffer[i]; // this prints out different data
同样,这会显示没有间距的元素。
当你修复这些东西时,问题仍存在吗?
如果是,请同时发布您的populateArray
功能。
答案 1 :(得分:3)
我看到您的代码没有任何问题。以下代码
#include <iostream>
#include <vector>
int main()
{
const std::size_t arraySize = 640000;
unsigned char buffer[arraySize];
for(std::size_t idx = 0; idx < arraySize; ++idx)
buffer[idx] = idx;
std::vector<unsigned char> vector_buffer(buffer, buffer + arraySize);
//std::vector<unsigned char> vector_buffer;
//std::copy (buffer, buffer + arraySize, std::back_inserter(vector_buffer));
for(std::size_t idx = 0; idx < arraySize; ++idx)
if( buffer[idx] != vector_buffer[idx] )
{
std::cout << "error @" << idx << '\n';
return 1;
}
std::cout << "Ok.\n";
return 0;
}
为我打印Ok.
。 (即使我使用不太理想的方式复制到矢量中。)
由于您显示的代码无法编译,我得出的结论是您没有显示真实的代码。请这样做。在你的真实代码和我的代码之间的差异必定是问题。
答案 2 :(得分:1)
我为你写了一个完整的可编辑程序。代码看起来很好。我运行它并得到预期的输出。也许您需要根据实际代码重新检查您发布的代码。
#include <cstdlib>
#include <vector>
#include <iostream>
#include <iterator>
using namespace std;
void populateArray(unsigned char* buf, size_t buf_size)
{
unsigned char* buf_end = &buf[buf_size];
for( unsigned char c = 'A'; buf != buf_end; c = (c=='Z'?'A':c+1), ++buf )
*buf = c;
}
int main()
{
static const int arraySize = 64;
std::vector<unsigned char> vector_buffer;
unsigned char buffer[arraySize];
populateArray(buffer, sizeof(buffer));
for(int i = 0; i < arraySize; i++)
cout << buffer[i]; // this prints out data
cout << endl;
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
return 0;
}