Как удалить элемент случайным образом из вектора? - PullRequest
0 голосов
/ 06 апреля 2020

Хотелось бы узнать, как можно произвольно стереть элемент в векторе. Например, у меня есть вектор с целыми числами 1,2,3,4,5. Я хочу стереть один из них случайно. Как бы я поступил так?

int main() {

    vector <int> myvec {1,2,3,4,5}; 



 if (!myvec.empty()) { 

     myvec.erase(myvec.begin());


     cout << myvec.at(0);
     cout << myvec.at(1);
     cout << myvec.at(2);
     cout << myvec.at(3);


 }

 else {

     cout << "Vector is empty" << endl;

     }
}

Выше приведен код, который у меня есть. Это оператор if и else, который проверяет, является ли вектор пустым или нет, и удаляет элемент. Вопрос в том, что я не уверен, как заставить его удалить случайный элемент. На данный момент он удаляет только первый элемент.

Ответы [ 3 ]

0 голосов
/ 06 апреля 2020

Спасибо за комментарии. Я понял это.

srand((unsigned) time(0));
  int randomNumber;
  for (int index = 0; index < 1; index++) {
    randomNumber = (rand() % 5) + 0;
    cout << randomNumber << endl;
  }



    vector <int> myvec {1,2,3,4,5}; 



 if (!myvec.empty()) { 


     myvec.erase(myvec.begin() + randomNumber);


     cout << myvec.at(0);
     cout << myvec.at(1);
     cout << myvec.at(2);
     cout << myvec.at(3);


 }

 else {

     cout << "Vector is empty" << endl;

     }
}

0 голосов
/ 06 апреля 2020

Используйте генератор случайных целых чисел, чтобы сгенерировать целое число от (0 до размера вашего вектора -1), затем используйте стирание с сгенерированным числом, как показано ниже

#include<random>
#include<chrono>
#include<vector>
int main()
{
    std::vector <int> myVec {1,2,3,4,5};

    //creat a random engine object and seed it 
    std::default_random_engine engineObj(std::chrono::system_clock::now().time_since_epoch().count());
    //The distribution will be used
    std::uniform_int_distribution<size_t> randomInt{0ul, myVec.size()-1};

    //Erase
    myVec.erase(myVec.begin() + randomInt(engineObj));

    //Test
    for(auto const & el: myVec) std::cout << el << " ";
    }
0 голосов
/ 06 апреля 2020

Вам нужна функция rand () . Используйте его для генерации случайного индекса в вашем векторе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...