Что делают функции begin() и end()

315
15 января 2018, 09:04

Нигде не могу найти описание функций begin() и end(), для чего они нужны? Если можно напишите пример пожалуйста :)

Answer 1

Итератор, указывающий на первый элемент в контейнере, и за последний элемент.

int a[] = {1,2,3,4,5};
for(auto i = begin(a); i != end(a); ++i)
    cout << *i << endl;

Примерно так. Если вы о свободных функциях.

Функции-члены делают то же самое:

vector<int> a {1,2,3,4,5};
for(auto i = a.begin(); i != a.end(); ++i)
    cout << *i << endl;
Answer 2

Шаблоны функций std::begin и std::end просто вызывают методы begin() и end() у своего аргумента и возвращают полученный результат. Но при этом они специализированы особым образом для аргументов типа "массив": std::begin возвращает указатель на начало массива, а std::end указатель на воображаемый элемент за концом массива.

Эти функции предназначены для унификации интерфейса между стандартными контейнерами, обыкновенными массивами и std::initializer_list. Начиная с С++17 в этот комплект также входят шаблоны функции std::data, std::size и std::empty, служащие аналогичным целям и реализованные аналогичным образом.

Пользуясь этими функциями вы можете писать унифицированный generic шаблонный код, который сможет работать как со стандартными контейнерами, так и с обычными массивами, и с std::initializer_list без необходимости вручную писать специализированные версии для этих особых случаев

template <typename T> void print(const T &c)
{
  if (!std::empty(c))
  {
    std::cout << "Size: " << std::size(c) << std::endl;
    for (auto it = std::begin(c); it != std::end(c); ++it)
      std::cout << *it << " ";
    std::cout << std::endl;
  }
}
int main()
{
  int a[] = { 1, 2, 3 };
  print(a);
  std::list<double> l = { 5, 6, 7, 8 };
  print(l);
  auto il = { "10", "11", "12", "13", "14" };
  print(il);
}

За пределами generic кода необходимости в использовании этих функций нет, но использовать их по-прежнему можно и иногда даже весьма удобно.

READ ALSO
Для чего нужен static_cast, как он работает и где его применяют?

Для чего нужен static_cast, как он работает и где его применяют?

У static_cast очень много различных примененийЕго идея состоит в следующем: это ограниченный по мощи C-style cast

333
Максимальный обьем кучи С++

Максимальный обьем кучи С++

Какой максимальный обьем кучи? Если у стека приблизительно: 4 MB?

235
Работа с std::vector в С++

Работа с std::vector в С++

Задача состоит в следующем:

285
Где тут логика? - c++

Где тут логика? - c++

Я не ошибся словом, именно логика

260