该程序的预期性质是将数字随机生成到矢量容器中,然后按升序对其进行排序并打印出数字。该程序可以正确编译,但也可以对生成的每个数字进行排序并打印值0
。
#include "stdafx.h"
//contains all header files (ctime, algorithm, iostream, vector), also
defines const vector size as 250
using namespace std;
void genRndNums(vector <int> &v);
void printVec(vector <int> &v);
int main()
{
vector <int> myVector(VEC_SIZE);
genRndNums(myVector);
printVec(myVector);
return 0;
}
void genRndNums(vector <int> &v)
{
int v1;
srand(time(nullptr));
for (int i = 0; i < VEC_SIZE; i++)
{
v1 = rand() % 1000 + 1;
v.push_back(v1);
//v.push_back(rand() % 1000 + 1);
}
}
void printVec(vector <int> &v)
{
vector<int>::iterator it;
sort(v.begin(), v.end());
for (it = v.begin(); it != v.end(); it++)
{
cout << *it << " ";
}
}
如果打印出250
个数字,它将显示整数0
250次,然后按升序显示其余数字。
这是由于打印函数中的for循环放错了位置,但是我不确定如何使向量仅显示随机整数。
答案 0 :(得分:1)
由于您正在使用push_back
向向量添加元素,因此需要从一个空向量开始。即您需要将vector <int> myVector(VEC_SIZE);
替换为vector <int> myVector;
。
答案 1 :(得分:1)
这是一个常见错误。 push_back
添加到大小已为VEC_SIZE
的向量的末尾。您可以从这样的空向量开始:
vector <int> myVector;
或者您可以将值分配给现有矢量(其大小为VEC_SIZE
)元素,如下所示:
for (int i = 0; i < VEC_SIZE; i++)
{
v1 = rand() % 1000 + 1;
v[i] = v1;
}
答案 2 :(得分:0)
您的向量构造函数创建具有250个数字的向量(每个向量具有0值)。在该数字的后面附加了另外250个生成的数字。
您不得在开头创建该250个数字
#include <vector>
#include <algorithm>
#include <random>
#include <iostream>
int main()
{
std::vector<int> v;
{
std::random_device r;
std::default_random_engine e(r());
std::uniform_int_distribution<int> d(1, 6);
std::generate_n(std::back_inserter(v), 250, [&](){ return d(r); });
}
std::sort(v.begin(), v.end());
for (auto x : v) {
std::cout << x << "\n";
}
return 0;
}
或覆盖它们
#include <vector>
#include <algorithm>
#include <random>
#include <iostream>
int main()
{
std::vector<int> v(250);
{
std::random_device r;
std::default_random_engine e(r());
std::uniform_int_distribution<int> d(1, 6);
std::generate(v.begin(), v.end(), [&](){ return d(r); });
}
std::sort(v.begin(), v.end());
for (auto x : v) {
std::cout << x << "\n";
}
return 0;
}