繁体   English   中英

用C ++排序向量

[英]Sorting Vector in C++

我将一个整数二进制文件读取为int向量。 当我使用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");
vector<int> v (NumBlocks*ELEMENTS_PER_BLOCK*sizeof(int));

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

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

该文件具有.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 ) );

错误在这一行:

vector<int> v (NumBlocks*ELEMENTS_PER_BLOCK*sizeof(int));

参数应为元素数,而不是字节数,因此从末尾取出*sizeof(int) 实际上,向量具有所需元素的4倍。 您没有读到的那些全为零,因此,当您调用sort ,它们都位于向量的前面,然后您只打印出零,而不打印具有实际数据的那些。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM