2017-10-28 2 views
1

私は、1から100までの50の一意のランダムな整数を挿入する方法を解明しようとしています。他の例を見ましたが、私が使用しているコードに翻訳するのは難しかったです。私はあまりにも多くのコードを変更することなく、誰かが正しい方向に私を置くことができますか?ユニークな乱数をリンクリストに挿入するにはどうすればよいですか?

void displayListForward(SortedListInterface<int>* listPtr) 
{ 
cout << "The sorted list contains " << endl; 
for (int pos = 1; pos <= listPtr->getLength(); pos++) 
{ 
    cout << listPtr->getEntry(pos) << " "; 
} 
cout << endl << endl; 
} 


void InsertRandomInts() 
{ 
LinkedSortedList<int> list; 
srand((unsigned)time(NULL)); 

for (int i = 0; i < 50; ++i) 
{ 
    int b = rand() % 100 + 1; 
    list.insertSorted(b); 
    displayListForward(&list); 
} 
} 
+0

[SET](http://en.cppreference.com/w/cpp/container/set)で開始として使用することができる

限り、その大きさがより小さいようにインサート要求された数の値を入力し、リストにコピーします。 –

+0

セットが分かりません。私はすでに私の価値を私が望む数より少なく保っています。 –

+0

あなたは何を持っているのですか? –

答えて

0

あなたはそれらをユニークにしている問題ですか?そうであれば、ヘルパー関数を追加して既存のリストを検索し、存在しない場合は追加したり、存在する場合は新しいものを生成することができます。また、別のデータ構造で数値を作成し、ノードを作成するときにリンクされたリストで数値を初期化する方が簡単かもしれません。あなたは、このように検索機能を使用することができ、そして、あなたのInsertRandomInts内部の状態は、そのユニークなかどうかを判断するために機能する

:すべての

bool search(std::vector<std::int> list, int obj){ 
    for (int i = 0; i < list.size(); i++){ 
     // key already exists in list 
     if (obj == list[i]){ 
      return true; 
     } 
    } 
    // not found 
    return false; 
} 
+0

どのように私はそれをInsertRandomIntsに入れますか? Existsと呼ばれるブールを宣言してからsearch()と言うようなものIf(Exists = true)remove(i)?私は何をすべきかわからない。 –

0

まず、C++は古いC srandrand機能よりpseudo-random generation utilitiesはるかに優れてい。

第2に、std::set(さらにこの場合、std::unordered_set)は、ユニークな値のコレクションを取得するのに非常に適しています。これは

std::random_device r; 
std::default_random_engine e1(r()); 

// To get random numbers between 1 and 100 (inclusive) 
std::uniform_int_distribution<int> uniform_dist(1, 100); 

// A set to store values 
std::unordered_set<int> random_values; 

// Loop until we get 50 unique random values 
while (random_values.size() < 50) 
{ 
    random_values.insert(uniform_dist(e1)); 
} 

// Now there are 50 unique (pseudo) random numbers in the set 
+0

STDはrandom_device rまたはdefault_random_engineを取っていません。彼らはメンバーではないと言います。 –

+0

@KennethDionisiその後、正しいヘッダーが含まれていないか、またはコンパイラが古く、C++ 11の機能を有効にするために特別なフラグが必要です(古いものにすると、アップグレードする必要があります)。 –

+0

正しいヘッダーは何ですか? –

関連する問題