簡體   English   中英

洗牌后從向量后面刪除一個元素 c++

[英]remove an element from the back of a vector after shuffling it c++

所以代碼的目的是打亂一個向量,然后從向量中打印一個隨機數,然后刪除相同的數字,這樣它就不會重復了。 我所做的是:

  1. 有一個名為歌曲的初始化向量,首先我使用 random_device 來制作隨機函數。
  2. 我在向量的后面初始化了一個迭代器。
  3. 我打亂了向量
  4. 打印
  5. 刪除我打印的最后一個元素(改組后)。

問題是當我做 song.pop_back(); 它從原始向量中刪除最后一個元素,而不是從洗牌的向量中刪除,因此它使數字以這種方式返回。 我得到一個錯誤。

代碼:

int getSong(int n, vector<int> songs, vector<int>::iterator iter) {
    random_device random;
    shuffle(songs.begin(), songs.end(), random);
    for (int j = 0; j < n; j++) {
        cout << songs[j] << " ";
    }
    iter = songs.end() -1 ;
    int song = *iter;
    iter--;
    return song;
}

int main() {

    vector<int> songs = { 1,2,3,4,5,6,7,8,9 };
    int n = songs.size();
    vector<int>::iterator iter;
    for (int i = 0; i < n; n--) {
        int l = getSong(n, songs, iter);
        cout << "The song number is:" << l << "\n" << endl;
        songs.pop_back();
    }

    return 0;
}

output 是: 在此處輸入圖像描述

謝謝!

我會寫這樣的東西:

int getSong( vector<int>& songs ) {
    random_device random;
    shuffle(songs.begin(), songs.end(), random);
    for ( int song : songs ) {
        cout << song << " ";
    }
    cout << endl;
    return *songs.rbegin();
}

int main() {
    vector<int> songs = { 1,2,3,4,5,6,7,8,9 };
    while( !songs.empty() )  {
        int l = getSong(songs);
        cout << "The song number is:" << l << "\n" << endl;
        songs.pop_back();
    }
    return 0;
}

https://godbolt.org/z/oWbxvMjE3

產生:

Program stdout

5 3 6 8 1 9 7 4 2 
The song number is:2

7 3 5 8 6 9 1 4 
The song number is:4

6 1 9 8 3 5 7 
The song number is:7

3 6 1 5 8 9 
The song number is:9

6 8 5 3 1 
The song number is:1

8 5 3 6 
The song number is:6

3 5 8 
The song number is:8

3 5 
The song number is:5

3 
The song number is:3

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM