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

#c #stdvector #c 20 #c -standard-library #std-span

#c #stdvector #c 20 #c -стандартная библиотека #std-span

Вопрос:

Я хотел сделать это

 #include <vector>
#include <span>

struct S
{
    std::vector<int> v;
    void set(std::span<int> _v)
    {
        v = _v;
    }
};
  

Но это не компилируется. Каковы альтернативы?

Ответ №1:

 v.assign(_v.begin(), _v.end());
  

Комментарии:

1. Спасибо, довольно аккуратно. Я думал сделать clear() insert(), но это выглядит лучше.

2. это ( clear insert ) в основном то, что assign делает.

3. по общему признанию, clear является дополнительным, если оно находится в конструкторе, поскольку вы не ожидаете каких-либо элементов данных в пустом векторе.

Ответ №2:

Вы также можете использовать std::vector::insert следующим образом:

 v.insert(v.begin(), _v.begin(), _v.end());
  

Обратите внимание, что, если v должен быть очищен раньше, вы должны вызвать v.clear() перед этим. Однако это позволяет добавить span в указанное место в v .

(Смотрите демонстрацию)