const int Size=100;
std::random_device rd;
std::mt19937 gen(rd());
std::uniform_int_distribution<> dis(0, 1000);
int main()
{
list<double>a(Size);
iota(a.begin(), a.end(), 2);
shuffle(a.begin(),a.end(),dis(gen));
}
Ошибка:error: no match for 'operator+' (operand types are 'std::_List_iterator<double>' and 'int')
Идем в документацию std::shuffle:
...
template< class RandomIt, class URNG >
void shuffle( RandomIt first, RandomIt last, URNG&& g );
...
Требования к типам
-RandomIt должен соответствовать требованиям ValueSwappable и RandomAccessIterator.
-URNG должен соответствовать требованиям UniformRandomNumberGenerator.
Т.е. передаваемые итераторы должны иметь перегруженный operator+, которого нет у итератора std::list, который сам по себе является контейнером с последовательным доступом.
list не предоставляет итератор с произвольным доступом, shuffle к нему неприменим (оператор +, о котором идет речь в сообщении об ошибке, не определен для итератора контейнера list).
Воспользуйтесь vector<double>.
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости