Din666 »22 авг 2018, 17:06
Пытаюсь заполнить массив случайными уникальными числами
Никак не могу понять почему не вылетает исключение в том случае,
если разница между randomRangeMin и randomRangeMаx == 1
если разница больше - все ок
Код: Выделить всё
#include <iostream>
#include <iterator>
#include <algorithm>
#include <vector>
int main() {
std::vector<int> array;
auto randomRangeMin = 1;
auto randomRangeMax = 2;
auto randomRange = randomRangeMax - randomRangeMin;
try {
std::generate_n(
std::back_inserter(array)
, 10
, [&](){
int tryCount = 0;
int rnd = 0;
while (
(rnd = std::rand()%randomRange + randomRangeMin) > randomRangeMin // fake condition for assignment
&& array.end() != std::find(array.begin(), array.end(), rnd)
) {
if (tryCount >= randomRange ) {
throw std::logic_error("cant generate unique element for array");
}
++tryCount;
}
return rnd;
}
);
} catch ( const std::exception & err ) {
std::cout << "Error: " << err.what() << std::endl;
}
std::copy(
array.begin()
, array.end()
, std: :o stream_iterator<int>(std::cout, " ")
);
return EXIT_SUCCESS;
}
туплю под вечер наверно
результат работы:
1 1 1 1 1 1 1 1 1 1
Пытаюсь заполнить массив случайными уникальными числами
Никак не могу понять почему не вылетает исключение в том случае,
если разница между randomRangeMin и randomRangeMаx == 1
если разница больше - все ок
[code]
#include <iostream>
#include <iterator>
#include <algorithm>
#include <vector>
int main() {
std::vector<int> array;
auto randomRangeMin = 1;
auto randomRangeMax = 2;
auto randomRange = randomRangeMax - randomRangeMin;
try {
std::generate_n(
std::back_inserter(array)
, 10
, [&](){
int tryCount = 0;
int rnd = 0;
while (
(rnd = std::rand()%randomRange + randomRangeMin) > randomRangeMin // fake condition for assignment
&& array.end() != std::find(array.begin(), array.end(), rnd)
) {
if (tryCount >= randomRange ) {
throw std::logic_error("cant generate unique element for array");
}
++tryCount;
}
return rnd;
}
);
} catch ( const std::exception & err ) {
std::cout << "Error: " << err.what() << std::endl;
}
std::copy(
array.begin()
, array.end()
, std: :o stream_iterator<int>(std::cout, " ")
);
return EXIT_SUCCESS;
}
[/code]
туплю под вечер наверно
результат работы:
1 1 1 1 1 1 1 1 1 1