Весь мозг поломал, перечитал все об указателях и так и не понял как сделать этот код работоспособным. Как прямо сказать циклу что я ему подсовываю именно массив (а то он ругается что не найдена функция begin)?
void func (int * a)
{
for (auto n : a) { std::cout << n; }
}
int main() {
int arr[] = { 4,7,3,4,7,8,9,0};
func(arr);
}
Поскольку вы передаете указатель (да даже если бы вы передали массив без указания размера - все равно передался бы указатель), таким образом - никак. Указатель не несет в себе никакой информации, кроме адреса. func
никак не может узнать, где конец массива.
Поскольку в вопросе именно range-based цикл, то тривиальную передачу указателя, количества элементов и обычный цикл не рассматриваем.
Но и тут можно выкрутиться - с помощью шаблонов:
template<typename T, size_t N>
void func(T (&a)[N])
{
for (auto n : a) { std::cout << n << " "; }
}
int main() {
int arr[] = { 4,7,3,4,7,8,9,0};
func(arr);
}
@Harry. Стоит отметить, что в Вашем, очень изящном решении, в функцию передается не указатель на массив (как в исходном вопросе), а ссылка на массив известного размера. Именно такую рекомендацию дает Страуструп в четвертом издании своей книги (12.2.2, page 318):
If you really want to pass an array, rather than a container or a pointer to the first element of an array, you can declare a parameter of type reference to array.
Если не использовать шаблоны, то получим набор перегруженных функций - по одной на каждый размер передаваемого массива (и каждого типа массива). В предложенном же решении размер массива, передаваемого в функцию, будет известен в результате выполнения процедуры конкретизации (instantiation) шаблона функции.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Стоит задача реализовать в приложении на C++ потоковое видео (для браузеров), дали направление - WebMНа официальном сайте куча репозиториев (кодеки,...
Всем приветМне необходимо работать в Астра-Линукс и разрабатывать в нем приложения
Имеется не плохой пример от Microsoft по работе с Event Log, но проблема в том что текста самих событий он не выдаётКак можно получить текст событий?
Имеется класс button, который будет являться кнопкой в приложенииИспользуется вот так: