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>
.
Виртуальный выделенный сервер (VDS) становится отличным выбором
Описать функцию, которая в новом массиве получит только положительные значения элементов исходного массиваИспользовать механизм указателей
В общем, есть массив и нужно в него подобавлять элементовВопрос:каким образом это осуществить?
Можно ли как-то узнать, сколько строчек в функции? Возможно, рекурсивно посчитать все строчки для всех вызываемых подфункцийНадо подобное...