C++ c++;数组到向量问题
我正在尝试将数组复制到向量,但是,当数据复制到向量时,它与原始数组不同C++ c++;数组到向量问题,c++,arrays,vector,copy,C++,Arrays,Vector,Copy,我正在尝试将数组复制到向量,但是,当数据复制到向量时,它与原始数组不同 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 p
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
int-arraySize=640000;
std::向量缓冲区;
无符号字符缓冲区[arraySize];
人口阵列(和缓冲区);
for(int i=0;i 我看不出你的代码有什么问题。下面的代码
#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;
}
#包括
#包括
int main()
{
const std::size\u t arraySize=640000;
无符号字符缓冲区[arraySize];
对于(std::size\u t idx=0;idx
需要在标准C++中使用<代码> const <代码>。g++允许可变长度数组作为C99的语言扩展。最好将该扩展关闭。
这很可能是
populateArray(buffer)
,除非您有一个非常奇怪的populateArray
声明
for(int i = 0; i < arraySize; i++)
cout << buffer[i]; // this prints out data
最好使用std:.vector的assign
方法,比如vector\u buffer.assign(buffer,buffer+arraySize)
for(int i=0;i cout我已经为您编写了一个完整的可编译程序。代码看起来很好。我运行它并获得了预期的输出。也许您需要根据实际代码重新检查您发布的代码
#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;
}
#包括
#包括
#包括
#包括
使用名称空间std;
void populateArray(无符号字符*buf,大小)
{
无符号字符*buf_end=&buf[buf_size];
对于(无符号字符c='A';buf!=buf_end;c=(c=='Z'?'A':c+1),+buf)
*buf=c;
}
int main()
{
静态常量int arraySize=64;
std::向量缓冲区;
无符号字符缓冲区[arraySize];
populateArray(缓冲区,sizeof(缓冲区));
for(int i=0;i 这是最令人不安的。这是一个输出错误,还是比较缓冲区和向量字节之间的差异?如果是,它们是什么?它们是否遵循任何模式,例如规则偏移量或仅一些受影响的值?显示的代码应该可以工作。这是真正失败的代码吗?是数组和ve的类型吗ctor相同?--请注意,您可以使用(并且可能更有效)向量缓冲区。插入(缓冲区,缓冲区+数组大小)
,但这与手头的问题无关。您可以尝试将数组大小设置为10或20,并向我们显示putput吗?我也不确定无符号字符缓冲区[arraySize]可以在所有编译器上编译。populateArray
的签名是什么?是unsigned char**
还是unsigned char*
?+1用于使用assign()
。我怀疑,在OP的代码中,vector\u buffer
在声明和调用std::copy()之间不知怎么被修改了
。如果可能,更好的做法是延迟向量缓冲区的构建,直到缓冲区准备就绪,然后执行向量缓冲区(缓冲区,缓冲区+数组化);
如@sbi的代码所示。
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
#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;
}