Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/151.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/apache-kafka/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ c++;数组到向量问题_C++_Arrays_Vector_Copy - Fatal编程技术网

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;icout我已经为您编写了一个完整的可编译程序。代码看起来很好。我运行它并获得了预期的输出。也许您需要根据实际代码重新检查您发布的代码

#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;
}