Как да отпечатате x числа с rand()%

Как мога да отпечатам да речем 10 числа с помощта на rand(), след което да ги сортирам по най-голям?

#include <iostream>
using namespace std;

int main() {
    int b;
    cin >> b;
    srand(b);

    for (int i = 0; i < 10; i++){
       cout << rand() % 100000 << " ";
    }
}

person Gosho    schedule 12.11.2018    source източник
comment
Съхранявайте ги във вектор и сортирайте вектора.   -  person FrankS101    schedule 12.11.2018
comment
Бихте могли да вмъкнете в сортирана структура (напр. std::multiset), вместо да я сортирате след факта. Вероятно това ще бъде по-бързо.   -  person Mike Harris    schedule 12.11.2018
comment
@MikeHarris Всъщност, това вероятно е много по-бавно на всеки общ хардуер… Дори (предимно неуспешен) std::find() над несортиран std::vector<int> постоянно бие std::set<int>::find() на моя работен лаптоп Ivy Bridge за N‹=120. И във вашия пример няма асимптотично предимство във времето, така че шансовете са std::vector+std::sort винаги да печелят, без значение как избирате N. Процесорите обичат векторите – те им изпращат цветя… (Херб Сътър)   -  person Arne Vogel    schedule 13.11.2018


Отговори (1)


Можете да генерирате масив, да го отпечатате и след това да го сортирате (и да го отпечатате отново?).

Забележка: ако истинската произволност е проблем за вас, rand() + % не е от боя.

#include <array>
#include <algorithm>
#include <iostream>

int main()
{
    std::array<int, 10> data;
    std::generate(begin(data), end(data), rand);
    for (auto n : data) {
        std::cout << n << ", ";
    }
    std::cout << '\n';

    std::sort(begin(data), end(data));
    for (auto n : data) {
        std::cout << n << ", ";
    }
    std::cout << '\n';
}

демонстрация: http://coliru.stacked-crooked.com/a/2e62855189995ab0

Следва: как мога да дефинирам оператор, за да мога да напиша std::cout << data какъвто и да е типът на data?.

person YSC    schedule 12.11.2018