簡體   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