Описание тега std-span

Облегченный объект-оболочка, не являющийся владельцем, ссылающийся на непрерывную последовательность элементов в памяти.
4 ответа

Что такое "промежуток" и когда я должен его использовать?

Недавно я получил предложения по использованию span<T>в моем коде, или видел некоторые ответы здесь на сайте, которые используют spanх - якобы какой-то контейнер. Но - я не могу найти ничего подобного в стандартной библиотеке C++. Так что же э…
1 ответ

Сделать Eclipse CDT правильно игнорирует мой заголовок диапазона GSL

Я использую библиотеку поддержки рекомендаций gsl::span (из реализации Нейла Макинтоша) - с заголовком, расположенным по адресу /usr/local/src/gsl/include, Я также использую nVIDIA nSight 9.2, то есть Eclipse CDT версии 8.4.0.nvidia-что-то. Я добави…
13 окт '18 в 20:15
1 ответ

Является ли хорошей идеей основывать несобственный битовый контейнер на std:: vector<bool>? станд:: пролет?

В нескольких моих проектах мне все чаще приходилось работать с последовательными последовательностями битов в памяти - эффективно (*). До сих пор я написал набор встроенных автономных функций, настроенных на выбор типа "битовый контейнер" (например,…
13 июн '18 в 21:55
1 ответ

Как я должен представлять непрерывную последовательность принадлежащих мне элементов?

У меня есть куча типизированных данных в последовательной памяти, которые я получил как T *; и я также знаю количество элементов (как std::size_t хотя это не имеет большого значения). Я хотел бы использовать какой-то один тип или структуру данных дл…
4 ответа

Какой идиоматический способ ссылаться на std::what или not_yet_in_std::what?

Мне нравятся пролеты, поэтому я использую gsl::span здесь и там. Но - в C++20 это будет std::span вместо *. я использую std::optional, но для кода C++14 это должно быть std::experimental::optional, И так далее. Какой идиоматичный и своего рода персп…
04 окт '18 в 18:51
1 ответ

Почему в std::span отсутствует size_type?

Я обновлял старый код, который использовал мой класс span для homebrew, до того, который больше соответствует C++20 std::span и я получаю ошибки компиляции, потому что std::span не имеет size_type и вместо этого имеет index_type, Там была огромная д…
17 мар '19 в 16:27
2 ответа

Как написать библиотеку C++ для работы с любой реализацией span<T>?

Я пишу библиотеку ввода / вывода, в которой пользователю необходимо предоставить блоки памяти для чтения или записи. Моя библиотека принимает span&lt;T&gt; кажется наиболее естественным, так как: Это не навязывает пользователю выбор контейнера. Они …
19 июн '19 в 01:57
1 ответ

Возврат условного `range_expression`

Какой самый эффективный способ итерации по одному из нескольких известных диапазонов на основе некоторого условия? псевдокод для двоичного условия: for element in (condition ? range_a : range_b) // do work Этот "пример" показывает мое намерение испо…
27 авг '19 в 11:22
1 ответ

Почему std::span это указатель + размер, а не два итератора

Похоже, что std::span в С ++20 определяется аналогично template&lt;class T&gt; class span { T* begin; size_t count; }; И нет template&lt;class Iter&gt; class span { Iter begin; Iter end; }; что является более общим (работает с std::list, std::map и …
28 июн '19 в 21:03
1 ответ

Почему массив span и конструкторы std::array отличаются от конструкторов контейнеров

Я играл с последней спецификацией для std::span используя clang trunk и libC++ на Godbolt, и некоторые конструкторы сбивают с толку. В частности, я нахожу конструкторы из простого старого массива и и std::array отличаться от других контейнеров. Напр…
10 авг '19 в 20:17
2 ответа

Span распространяет const?

Стандартные контейнеры распространяют const. То есть их элементы автоматически являются константными, если сами контейнеры являются константными. Например: const std::vector vec{3, 1, 4, 1, 5, 9, 2, 6}; ranges::fill(vec, 314); // impossible const st…
04 июл '19 в 13:56
1 ответ

Что случилось с std::cspan?

std::span был проголосован в C++20. Я предположил, что наряду с std::span, был бы псевдоним удобства, определенный как это: template &lt;class T, size_t Extent = dynamic_extent&gt; using cspan = span&lt;const T, Extent&gt;; Мне кажется, это очень уд…
02 июл '19 в 08:21
1 ответ

Почему в std::span отсутствуют операторы сравнения?

Не было std::span разработан как легкая ссылка на субрегионы std::vector/std::array/простой массив и тому подобное? Разве он не должен также содержать в своем API операторы сравнения, чтобы соответствовать им? Что послужило причиной исключения? Прим…
11 мар '20 в 13:16
1 ответ

Как преобразовать std::vector уникальных указателей в std::span необработанных указателей?

У меня в интерфейсе какого-то модуля есть такая функция: void DoSomething(Span&lt;MyObject *const&gt; objects); , где Span это моя упрощенная реализация C++20 std::span шаблон. Эта функция просто перебирает непрерывную последовательность указателей …
03 фев '20 в 19:28
1 ответ

Создайте диапазон &lt;shared_ptr &lt;T&gt;&gt; из массива &lt;shared_ptr &lt;void&gt;&gt;

У меня есть std::array&lt;std::shared_ptr&lt;void&gt;, N&gt;, и у меня есть методы для доступа к частям этого буфера как к разным типам, которые я хотел бы использовать std::span&lt;std::shared_ptr&lt;T&gt;&gt; за. Есть ли способ построить такой диа…
05 июл '20 в 14:35
2 ответа

Как вы проверяете границы с помощью std span?

std::vector и почти все другие контейнеры имеют очень удобный способ проверки границ: at(). std::span по-видимому, этого нет. Почему? Есть замена? Помимо развертывания собственного at()?
02 авг '20 в 15:06
1 ответ

Почему в std::span отсутствуют методы cbegin и cend?

Почему std::span иметь только begin а также end методы, а не их постоянные аналоги итератора cbegin а также cend? (стандарт) Я также заметил, что в предложениях для диапазона, которые я смог найти, действительно есть определение для cbegin а также c…
06 июл '20 в 17:00
2 ответа

Самый простой способ назначить std::span на std::vector

Я хотел сделать это #include &lt;vector&gt; #include &lt;span&gt; struct S { std::vector&lt;int&gt; v; void set(std::span&lt;int&gt; _v) { v = _v; } }; Но не компилируется. Какие есть альтернативы?
1 ответ

Почему в libstdC++ нет span::span(контейнер &amp;)?

Согласно cppreference, в C++20std::span предполагается, что его можно построить с использованием ссылок на контейнеры: template &lt;class Container&gt; constexpr span(Container&amp; cont); template &lt;class Container&gt; constexpr span(const Contai…
18 янв '20 в 23:43
2 ответа

Как использовать span для завершения аргументов командной строки

Это использование грядущего C++20 std::span правильно и без накладных расходов на завершение аргументов командной строки? #include &lt;iostream&gt; #include &lt;span&gt; int main(int argc, const char* argv[]) { for (auto s : std::span { argv, static…
05 июн '20 в 18:24