C++ C+中的排序向量+;

C++ C+中的排序向量+;,c++,sorting,vector,C++,Sorting,Vector,我把一个整数二进制文件读成int向量。当我使用排序函数时,向量是零 我知道向量是好的 有什么不对劲吗 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_BLOC

我把一个整数二进制文件读成int向量。当我使用排序函数时,向量是零

我知道向量是好的

有什么不对劲吗

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");
std::ifstream输入(“D:\\Amostra.txt”,ios::binary);
向量v(NumBlocks*每个块的元素数*sizeof(int));
input.read(reinterpret_cast(&v[0]),NumBlocks*ELEMENTS_PER_BLOCK*sizeof(int));
排序(v.begin(),v.end());
对于(int i=0;i
该文件具有
.txt
扩展名,但您正在读取它,就像它是二进制文件一样。如果该文件是二进制转储文件,则此读取是…嗯…代码气味,但并非完全错误。如果该文件是文本,则此读取是完全错误的

您可以使用
copy
算法和
istream\u迭代器读取仅包含空格分隔整数的文本文件:

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 ) );
std::vector v;
v、 保留(每个块的数量锁*元素);
std::copy(std::istream_迭代器(输入),std::istream_迭代器(),
标准:背部插入器(v);

错误在这一行:

vector<int> v (NumBlocks*ELEMENTS_PER_BLOCK*sizeof(int));
向量v(NumBlocks*元素/u块*sizeof(int));

参数应该是元素数,而不是字节数,因此去掉
*sizeof(int)
从头到尾。事实上,你的向量有你想要的4倍多的元素。你没有读入的元素都是零,所以当你调用
sort
时,它们会出现在向量的前面,然后你只打印出零个元素,而不是带有真实数据的元素。

你是在将
int
转换为
char*
。我不这么认为什么才是真正有效的?我确定你不想改为
char
?请检查
NumBlocks
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 ) );
vector<int> v (NumBlocks*ELEMENTS_PER_BLOCK*sizeof(int));