#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
.