Нигде не могу найти описание функций begin()
и end()
, для чего они нужны?
Если можно напишите пример пожалуйста :)
Итератор, указывающий на первый элемент в контейнере, и за последний элемент.
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;
Шаблоны функций 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 кода необходимости в использовании этих функций нет, но использовать их по-прежнему можно и иногда даже весьма удобно.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
У static_cast очень много различных примененийЕго идея состоит в следующем: это ограниченный по мощи C-style cast