Я новичок в C ++ 11, и меня смущает использование класса std::refence_wrapper
.
Давайте рассмотрим пример, показанный в https://en.cppreference.com/w/cpp/utility/functional/reference_wrapper, в котором перетасовываются содержащиеся в нем элементыв стандартном std::vector
, то есть:
std::vector<int> l(10);
std::iota(l.begin(), l.end(), -4);
std::vector<std::reference_wrapper<int>> v(l.begin(), l.end());
std::shuffle(v.begin(), v.end(), std::mt19937{std::random_device{}()});
Теперь, если рассмотреть исходный вектор l
, у меня есть l.data()
возвращает указатель на внутренний массив, который я могу использовать в Cприложение.
Вместо этого мне не ясно, что возвращает v.data()
.Я пробовал различные комбинации явно неправильных приведений, таких как int* p = (int*)(v.data()->get())
без получения правильных результатов (поменявшиеся значения).
Моя цель - связать приложение C ++ (которое дает мне вектор справочных упаковщиков) со старой библиотекой C.Можете ли вы указать мне, какой самый правильный способ получить C-подобный массив из вектора v
после случайного воспроизведения, показанного в примере?Нужно ли копировать все элементы один за другим в другом векторе?Есть ли класс C ++ 11, который может помочь мне в работе?Спасибо