@fronttrty

Как сделать срез массива?

как сделать срез который в питоне оформляется так :
d = d[2:]
  • Вопрос задан
  • 387 просмотров
Пригласить эксперта
Ответы на вопрос 2
Советую копать в направлении std::span. Ему нужны итераторы begin и end, например, v.begin() и v.begin() + 2. Так можно создать срез без копирования всех элементов массива.
Ответ написан
Комментировать
@Mercury13
Программист на «си с крестами» и не только
В Си++ нет понятия «произвольный массив», и это мешает.
Но несложно этот самый произвольный массив (без хранения) написать
template <class T>
struct Buf1d {
  size_t size;
  T* d;
  constexpr Buf1d() : size(0), d(nullptr) {}
  constexpr Buf1d(size_t aSize, T* aD) : size(aSize), d(aD) {}
  Buf1d(std::vector<T>& x) : size(x.size()), d(x.data()) {}
}

И этому Buf1d можно придумать и другие функции, например:
template <class T>
Buf1d<T> Buf1d<T>::sliceLeft(size_t x) const
{
  if (x >= size) {
    return {};
  } else {
    return { size - x, d + x };
  }
}


Если же вам нужно с хранением, то, например, можно воспользоваться старым добрым vector.
template<class T>
std::vector<T> sliceLeft(const std::vector<T>& v, size_t x)
{
  if (x >= v.size()) {
    return {};
  } else {
    std::vector<T> r;
    r.insert(r.end(); v.begin() + x, v.end());
    return r;
  }
}
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы