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