[英]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.