Я пытаюсь собрать этот кусок с ++ 17 код, который содержит std::sample
с помощью gcc версия 6.3.0 с помощью следующей команды: g++ -std=gnu++17 -c main.cpp
,
Но я получаю это: error: ‘sample’ is not a member of ‘std’
…
#include <vector>
#include <algorithm>
#include <random>
int main()
{
std::vector<int> a{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
std::vector<int> b(5);
std::sample(a.begin(), a.end(),
b.begin(), b.size(),
std::mt19937{std::random_device{}()});
return 0;
}
Поддерживает ли gcc 6 использование std::sample
? (Хорошо компилируется с gcc 8.2.0)
Я не мог найти ответ на этих двух страницах:
Да, так как GCC 5, но пока GCC 7 он находится в std::experimental
пространство имен и определено в <experimental/algorithm>
заголовок.
Из примечаний к выпуску GCC 5:
Библиотека времени выполнения (libstdc ++)
Улучшена экспериментальная поддержка библиотечных основ TS, в том числе:
- шаблон функции std :: эксперимент :: образец;
Проверено на GCC 5.1 https://wandbox.org/permlink/HWnX3qSgKbZO2qoH
Нет, мы можем видеть из таблица в документации под «Основы библиотеки V1 TS Компоненты: Выборка», что самая ранняя версия libstdc ++ для поддержки std::sample
это версия 7.1
Поддерживает ли gcc 6 использование std :: sample?
Нет. Вам нужен GCC 7. Из Замечания к выпуску GCC 7:
Экспериментальная поддержка C ++ 17, включая следующие новые функции:
…
std :: sample, std :: default_searcher, std :: boyer_moore_searcher и
станд :: boyer_moore_horspool_searcher;
Для GCC 7 вам может понадобиться -std=c++1z
или же -std=gnu++1z
так как это экспериментально.