【问题标题】:How to erase an element randomly from a vector?如何从向量中随机删除一个元素?
【发布时间】:2020-04-06 13:38:15
【问题描述】:

我想知道如何随机擦除向量中的元素。例如,我有一个向量,其中包含整数 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 语句,用于检查向量是否为空并擦除一个元素。问题是我不确定如何让它删除随机元素。目前它只删除第一个元素。

【问题讨论】:

  • 如果您在此处搜索“[c++] 生成随机数”,您将找到有关如何在某个范围内生成随机值的说明(例如,从 0myvec.size()-1)。生成这样一个值,并将其添加到myvec.begin() 以获得引用myvec 元素的迭代器。
  • @maany:在学习编程时,有助于将问题分解成更小的部分。你可以删除第二个元素吗?你能写一个函数来接受int i 并删除第 i 个元素吗?之后,您只需要使用随机值调用该函数。
  • @MSalters 是的,我可以通过在开始后添加 +1 来删除第二个元素

标签: c++ vector random stl


【解决方案1】:

使用随机整数生成器生成一个从(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 << " ";
    }

【讨论】:

    【解决方案2】:

    感谢 cmets。我想通了。

    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 什么都不做,您对rand() 的使用已经过时,但可能适合您的目的
    【解决方案3】:

    你想要rand() function。使用它为您的向量生成一个随机索引。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-07-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多