XGM Forum
Сайт - Статьи - Проекты - Ресурсы - Блоги

Форуме в режиме ТОЛЬКО ЧТЕНИЕ. Вы можете задать вопросы в Q/A на сайте, либо создать свой проект или ресурс.
Вернуться   XGM Forum > Общение> Hard & Soft
Ник
Пароль
Войти через VK в один клик
Сайт использует только имя.

Ответ
 
J64_

offline
Опыт: 4,724
Активность:
С++ Итераторы
Переделывая циклы, на циклы, использующие итераторы, упоролся в одной проблеме.
void foo(vector<int> *a, unsigned int i = 0, unsigned int j = 0)
{
	if (j == 0)
	{
		j = a->size();
	}
	for (; i < j; i++)
	{
	}
}
Но в C++ у итератора нет понятия "не зависимое пустое значение". Поэтому решил переделать так:
void foo(vector<int> *a, vector<int>::iterator i = a->begin(), vector<int>::iterator j = a->end())
{
	for (; i < j; i++)
	{
	}
}
И тут компилятор ругается, что нельзя использовать аргументы функции для значения по умолчанию.
А ведь по идее, переменная a создаётся до создания i и j.
В общем, мне напрочь отказаться от значений по умолчанию и\или создать функцию пустышку или как мне надо переделать?
Старый 08.11.2012, 16:30
Nerevar
I'll be back!
offline
Опыт: 18,352
Активность:
а почему бы не передавать просто указатель на вектор,а сами итераторы внутри цикла ставить?
Старый 08.11.2012, 17:06
J64_

offline
Опыт: 4,724
Активность:
Nerevar:
Потому что цикл может начинаться не с начала, и заканчиваться раньше конца.
Старый 08.11.2012, 17:28
alexprey
познающий Unity
offline
Опыт: 68,501
Активность:
Judycaster64, нельзя использовать параметры как аргументы по умолчаю. Юзай перегрузку функций
void foo(vector<int> *a, vector<int>::iterator i, vector<int>::iterator j)
{
//...
}
void foo(vector<int> *a)
{
    foo(a, a->begin(), a->end());
}
Старый 08.11.2012, 22:41
df Hunter
Нападатель
offline
Опыт: 5,749
Активность:
при передаче начального и конечного итераторов передача самого вектора избыточна
df Hunter добавил:
ну, стоит уточнить, что это в случае, если не идёт речь об изменении структуры контейнера

Отредактировано df Hunter, 18.11.2012 в 19:11.
Старый 18.11.2012, 19:04
Ответ

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы можете скачивать файлы

BB-коды Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход



Часовой пояс GMT +3, время: 08:35.