2017-10-28 70 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

开始与[组](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的bool,然后说search()If(Exists = true)remove(i)?我不知道我应该做什么。 –

0

首先,C++比旧的C srandrand功能更好pseudo-random generation utilities

其次,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

性病未采取random_device r或default_random_engine。它说他们不是成员。 –

+0

@KennethDionisi然后你要么没有包含正确的头文件,要么你的编译器是旧的,并且需要特殊的标志来启用C++ 11功能(或者老到有这种功能,在这种情况下你应该升级)。 –

+0

那么什么是正确的标题? –