簡體   English   中英

用隨機數填充向量 C++

[英]Fill a vector with random numbers c++

我有一個我試圖用隨機數填充的向量。 我一直遇到一個問題,但是每次運行向量時,它主要輸出 0(它不應該輸出 0)。 我在下面編寫的代碼中做錯了什么以使其輸出 0(它輸出 0 比任何其他數字都多):

vector<int> myVector;
srand((unsigned)time(NULL));
int a = rand() % 20 + 1; //1 to 20    
for (int i =0; i < a; i++){
        int b = rand() % 20 + 1;
        myVector.push_back(b);
        cout << myVector[b] << endl;
    }

我是初學者,很長一段時間沒有做過很多 C++ 編程,所以我不確定是什么導致我的代碼出現故障。 如果有人能解釋我做錯了什么,將不勝感激。

您可以使用 std::generate 算法用隨機數填充 n 個元素的向量。

在現代 C++ 中,建議不要使用任何基於時間的種子和 std::rand,而是使用 random_device 生成種子。 對於基於軟件的引擎,您始終需要指定引擎和發行版。 閱讀更多..

#include <random>
#include <algorithm>
#include <iterator>
#include <iostream>
#include <vector>

using namespace std;

int main()
{
    // First create an instance of an engine.
    random_device rnd_device;
    // Specify the engine and distribution.
    mt19937 mersenne_engine {rnd_device()};  // Generates random integers
    uniform_int_distribution<int> dist {1, 52};
    
    auto gen = [&dist, &mersenne_engine](){
                   return dist(mersenne_engine);
               };

    vector<int> vec(10);
    generate(begin(vec), end(vec), gen);
    
    // Optional
    for (auto i : vec) {
        cout << i << " ";
    }
    

}

如果要以隨機順序重新排列范圍的元素:

  std::shuffle(begin(vec), end(vec), mersenne_engine);

簡單地說:

#include <vector>
#include <algorithm>
#include <ctime>

std::srand(unsigned(std::time(nullptr)));
std::vector<int> v(1000);
std::generate(v.begin(), v.end(), std::rand);

只需添加我的 2 美分...此響應類似於Marko Tunjic給出的響應,但它不使用 C 中的std::rand ,而是使用 C++11 功能。 它允許您在下面的示例中使用您選擇的分布, uniform_int_distribution

#include <algorithm>
#include <iostream>
#include <limits>
#include <random>
#include <vector>

static std::vector<int> generate_data(size_t size)
{
    using value_type = int;
    // We use static in order to instantiate the random engine
    // and the distribution once only.
    // It may provoke some thread-safety issues.
    static std::uniform_int_distribution<value_type> distribution(
        std::numeric_limits<value_type>::min(),
        std::numeric_limits<value_type>::max());
    static std::default_random_engine generator;

    std::vector<value_type> data(size);
    std::generate(data.begin(), data.end(), []() { return distribution(generator); });
    return data;
}

int main()
{
    for (auto i = 0u; i < 5; ++i)
    {
        std::vector<int> myVector = generate_data(10);
        myVector = generate_data(10);

        std::cout << "myVector (iteration " << i << "): ";
        for (auto v: myVector)
        {
            std::cout << v << ",";
        }
        std::cout << "\n";
    }
}

您在向量中調用了錯誤的索引

嘗試做:

cout << myVector[i] << endl;

否則,在前 20 次左右的迭代中,您將冒着跑掉頂點的風險。

您還可以在向量上調用.back()以獲取向量中的最后一項。

您在向量中調用了錯誤的索引

cout << myVector[i] << endl;

不清楚你想用循環做什么,代碼正在創建一個隨機大小的向量,填充隨機數。

您正在輸出“myVector[b]”,但“b”是隨機值,而不是剛剛添加的數字的索引。 你可以:

cout << b << endl;

但實際上您應該調整向量的大小,並且只需按索引訪問。

int vec_size = rand() % 20 + 1;
vec<int> myvec(vec_size);
for( int i = 0; i < vec_size; ++i ) {
    vec[i] = rand() % 20 + 1;
}

/* output the list after you made it */
std::copy(myvec.begin(), myvec.end(),
        std::ostream_iterator<int>(cout, "\n"));
// here I generate a vector that contains random vectors
// for example, after this code, vec = { {1,4,8}, {1,3,6,7,9}, {2,5,6} }

#include <vector>
#include <time.h>

void generate_random_vectors(const int num_of_rand_vectors, vector<vector<int>> &vec) {
    for (int j = 0; j < num_of_rand_vectors; ++j) {
        // the vector size will be randomal: between 0 to 19
        int vec_size = (rand() % 20);
        vector<int> rand_vec(vec_size);
        for (int k = 0; k < vec_size; ++k) {
            // each vec element will be randomal: between 1 to 20
            rand_vec[k] = 1 + (rand() % 20);
        }
        // each vector will be sorted if you want to
        sort(rand_vec.begin(), rand_vec.end());
        // push each of the 'num_of_rand_vectors'-th vectors into vec
        vec.push_back(rand_vec);
    }
}

void main() {

    srand(static_cast<unsigned int>(time(NULL)));

    // input vector containing random sorted vectors
    vector<vector<int>> vec;
    generate_random_vectors(3, vec);
}
cout << myVector[b] ?!

它應該是: cout << myVector[i];

暫無
暫無

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

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