从向量不需要的值进行迭代器打印

时间:2018-09-04 03:12:44

标签: c++ vector

该程序的预期性质是将数字随机生成到矢量容器中,然后按升序对其进行排序并打印出数字。该程序可以正确编译,但也可以对生成的每个数字进行排序并打印值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循环放错了位置,但是我不确定如何使向量仅显示随机整数。

3 个答案:

答案 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;
}