Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/148.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 关于c++;_C++_Stl - Fatal编程技术网

C++ 关于c++;

C++ 关于c++;,c++,stl,C++,Stl,我想做一个函数,生成一个随机数列表,用户插入一个大小,在这些随机数上应用一些排序算法,为什么这个代码不运行..plz帮助 vector<int> DataList; int GenerateRandomList(int min, int max, int size) { srand ( time(NULL) ); for(int i=0;i<size;i++) { DataList[i]=rand()% max+min;

我想做一个函数,生成一个随机数列表,用户插入一个大小,在这些随机数上应用一些排序算法,为什么这个代码不运行..plz帮助

vector<int> DataList; 

int GenerateRandomList(int min, int max, int size)
{
    srand ( time(NULL) );
    for(int i=0;i<size;i++)
    {
        DataList[i]=rand()% max+min;
        cout<<DataList[i];
        cout<<endl;
    }
}
矢量数据表;
int GenerateRandomList(int-min、int-max、int-size)
{
srand(时间(空));

对于(int i=0;i您的向量为空,您不能指定给不存在的元素

只需将
DataList[i]=…
替换为
DataList即可。向后推(…)
,它应该可以工作

另外,
rand()%max+min
不会做你想做的事,因为在
min
max
之间只有
max+min+1
个数。
rand()%(max-min+1)+min
应该可以工作

另外,
srand
应该在
main
的开头调用一次,然后再也不要调用。否则,如果连续调用
GenerateRandomList
两次,可能会得到相同的数字序列


另外,为什么函数声明返回一个
int
?您应该将其更改为
void
std::vector
,并返回刚才生成的数字,而不是全局向量。

一个好方法是使用。链接页面上的示例说明了您的问题

在您的特定情况下,必须使用函子:

struct GenerateRandomList {
    GenerateRandomList(int min, int max)
    : min(min), max(max)
    {
        srand(time(NULL)); 
    }

    int operator()() const { 
        // this is courtesy of @FredOverflow's answer
        return rand() % (max - min + 1) + min; 
    }
private:
    int min;
    int max;
};

// for generating
std::vector<int> DataList(10);
std::generate(DataList.begin(), DataList.end(), GenerateRandomList(10, 20));
struct GenerateRandomList{
GeneratorDomainList(最小整数、最大整数)
:最小(最小)、最大(最大)
{
srand(时间(空));
}
int运算符()()常量{
//这是@fredfolflow的回答
返回rand()%(max-min+1)+min;
}
私人:
int-min;
int max;
};
//产生
std::矢量数据表(10);
std::generate(DataList.begin(),DataList.end(),GenerateRandomList(10,20));

您可以看到一个工作示例。这种方法的优点是,您可以为任何类型的容器(数组、列表、向量、集)生成随机数。

我认为您的问题是您希望执行push_back(int)而不是执行DataList[I]=rand()%max+min;。下面的代码编译并执行我认为您正试图执行的操作

#include <vector>
#include <stdlib.h>
#include <iostream>

using namespace std;

vector<int> DataList;
int GenerateRandomList(int min, int max, int size) {
   srand ( time(NULL) );
   for(int i=0;i<size;i++) {
     DataList.push_back(rand()% max+min);
    cout<<DataList[i];
    cout<<endl;
   }
}


int main() {
  GenerateRandomList(0,15,10);
}
#包括
#包括
#包括
使用名称空间std;
矢量数据表;
int GenerateRandomList(int-min、int-max、int-size){
srand(时间(空));

对于(int i=0;i)您的问题是什么?请格式化代码以使其可读。请重新格式化代码,我们无法读取它。“不运行”是什么意思?运行它时会发生什么?也没有必要使用“cout@隐身拉比:
endl
本身是愚蠢的。它应该是
'\n'
cout
应该是
cerr
(这使得刷新完全多余),因为我认为这是调试输出。虽然我认为你是对的,就这个人的技能水平而言,我认为这个答案对他们没有多大帮助。”-(@Omnifarious:我只是给他一个学习的机会。这是他自己的选择。+1:用STL学习更好的做事方式从来都不为时尚早,这是一种良好的情绪,我不会不同意。但是,如果你想让他学习,你应该为
GenerateRandomList
选择一个更好的名字。也许
RangedrandonumberGenerator
或其他什么。该类不生成列表,因此名称容易混淆。我会将
std::srand()
从ctor中取出。我会假设
main()
会解决这个问题。代码越少,速度越快,越正确。