用C++排序向量

p.m*_*aes 0 c++ sorting vector

我读了一个整数二进制文件到int vector.当我使用Sort函数时,向量归零...

我知道矢量没问题!

可能有什么不对?

std::ifstream input("D:\\Amostra.txt", ios::binary);
vector<int> v (NumBlocks*ELEMENTS_PER_BLOCK*sizeof(int));

input.read(reinterpret_cast<char *>(&v[0]), NumBlocks*ELEMENTS_PER_BLOCK*sizeof(int));


sort(v.begin(), v.end());

for (int i=0; i<ELEMENTS_PER_BLOCK*NumBlocks; i++){
        cout << v[i] << endl;
    };
system("pause");
Run Code Online (Sandbox Code Playgroud)

Dav*_*eas 12

vector<int> v (NumBlocks*ELEMENTS_PER_BLOCK*sizeof(int));
Run Code Online (Sandbox Code Playgroud)

该构造函数的参数是您需要的元素数,而不是这些元素占用的字节数.这将创建sizeof(int)*N元素,N您需要的数字在哪里.排序后第一个(sizeof(int)-1)*N将是0.

input.read(reinterpret_cast<char *>(&v[0]), NumBlocks*ELEMENTS_PER_BLOCK*sizeof(int));
Run Code Online (Sandbox Code Playgroud)

该文件具有.txt扩展名,但您正在阅读它,就好像它是二进制文件一样.如果文件是二进制转储,那么这个读取是......好......代码味道但不完全错误.如果文件是文本,那么这是完全错误的.

您可以使用copy算法读取仅包含空格分隔整数的文本文件,并且istream_iterator:

std::vector<int> v;
v.reserve(NumBlocks*ELEMENTS_PER_BLOCK);
std::copy( std::istream_iterator<int>(input), std::istream_iterator<int>(),
           std::back_inserter( v ) );
Run Code Online (Sandbox Code Playgroud)