簡體   English   中英

從向量不需要的值進行迭代器打印

[英]Iterator printing from vector unneeded values

該程序的預期性質是將數字隨機生成到矢量容器中,然后按升序對其進行排序並打印出數字。 該程序可以正確編譯,但也可以對生成的每個數字進行排序並打印值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循環放錯了位置,但是我不確定如何使向量僅顯示隨機整數。

由於您正在使用push_back向矢量添加元素,因此需要從空矢量開始。 即您需要替換vector <int> myVector(VEC_SIZE); vector <int> myVector;

這是一個常見的錯誤。 push_back將添加到向量的末尾,該向量的大小已為VEC_SIZE 您可以從這樣的空向量開始:

vector <int> myVector;

或者,您可以為現有的矢量(其大小為VEC_SIZE )元素分配值,如下所示:

for (int i = 0; i < VEC_SIZE; i++)
{
    v1 = rand() % 1000 + 1;
    v[i] = v1;
}

向量構造函數創建具有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;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM