powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / C++ итератор как параметр функции
18 сообщений из 18, страница 1 из 1
C++ итератор как параметр функции
    #34607532
Dronord
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день!

Не пойму, как правильно сделать?
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
#include <iostream>
#include <vector>

void f( const int *i )
{
	std::cout << *i << std::endl;
}

int main()
{
	std::vector<int> v;
	v.push_back( 1 );
	std::vector<int>::const_iterator i = v.begin();
	f( &(*i) );
	return  0 ;
}
Строка f( &(*i) ); почему-то не работает как f( i );

Спасибо!
...
Рейтинг: 0 / 0
C++ итератор как параметр функции
    #34607558
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
#include <iostream>
#include <vector>

void f( const int i )
{
	std::cout << i << std::endl;
}

int main()
{
	std::vector<int> v;
	v.push_back( 1 );
	std::vector<int>::const_iterator i = v.begin();
	f( *i );
	return  0 ;
}

Это хотели?
...
Рейтинг: 0 / 0
C++ итератор как параметр функции
    #34607589
Dronord
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Тогда в ф-и const не нужен, но можно
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
#include <iostream>
#include <vector>

void f( const int &i )
{
	std::cout << i << std::endl;
}

int main()
{
	std::vector<int> v;
	v.push_back( 1 );
	std::vector<int>::const_iterator i = v.begin();
	f( *i );
	return  0 ;
}

Ф-я f() не моя, как в неё итератор передать?
...
Рейтинг: 0 / 0
C++ итератор как параметр функции
    #34607725
egorych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DronordФ-я f() не моя, как в неё итератор передать? да так и передавать: f(i) - итератор-же суть указатель :)) - ну т.е. нечто, работающее как указатель
...
Рейтинг: 0 / 0
C++ итератор как параметр функции
    #34608027
Dronord
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
gcc 3.4.6 говорит нет подходящей функции, а static_cast<const int *>( i ) не может сконвертить.
Ниразу не встречал конструкции &(*i), может это и нормально. =\
...
Рейтинг: 0 / 0
C++ итератор как параметр функции
    #34608285
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dronordgcc 3.4.6 говорит нет подходящей функции, а static_cast<const int *>( i ) не может сконвертить.
Ниразу не встречал конструкции &(*i), может это и нормально. =\

В этом случае вы передаете не иттератор, а указатель на элемент.

Это конструкция, вполне, нормальная, т.к. *i возвращает вам значение по ссылке, а далее вы получаете на него указатель.
...
Рейтинг: 0 / 0
C++ итератор как параметр функции
    #34608297
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DronordТогда в ф-и const не нужен

для вас не нужен. Это вам говорит только лишь о том, что значения по этому указателю не изменятся. Он нужен для самой функции, что бы компилятор проводил проверки. Допустим программист случайно изменяет значения. Тогда компилятор ему сообщит об этом.
...
Рейтинг: 0 / 0
C++ итератор как параметр функции
    #34608315
Dronord
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akh , const не нужен в Вашем листинге, где
Код: plaintext
void f( const int i )
Надеюсь, описАлись =)
...
Рейтинг: 0 / 0
C++ итератор как параметр функции
    #34608321
Dronord
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Коллеги, ещё вопрос. Итератор же быстрее доступа по индексу?
...
Рейтинг: 0 / 0
C++ итератор как параметр функции
    #34608366
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dronord Akh , const не нужен в Вашем листинге, где
Код: plaintext
void f( const int i )
Надеюсь, описАлись =)

Тогда верно.
...
Рейтинг: 0 / 0
C++ итератор как параметр функции
    #34608375
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DronordКоллеги, ещё вопрос. Итератор же быстрее доступа по индексу?

Думаю зависит от реализации.

Во всяком случае не медленнее будет инкремент указателя.
...
Рейтинг: 0 / 0
C++ итератор как параметр функции
    #34608447
Фотография blinded
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Для вектора и деки будет скорее всего медленне
...
Рейтинг: 0 / 0
C++ итератор как параметр функции
    #34608469
батрак
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dronord
Ф-я f() не моя, как в неё итератор передать?

Можно так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
#include <iostream>
#include <vector>
#include <conio.h>
template<typename T>
void f(T &v, typename T::const_iterator &i)
{	while (i != v.end())
	{	std::cout << *i << std::endl;
		i++;
	}
}

int _tmain(int argc, _TCHAR* argv[])
{
	
	std::vector<int> v;
	v.push_back( 1 ); v.push_back( 2 );
	std::vector<int>::const_iterator i = v.begin();
	f(v, i);
	getchar();
	return  0 ;
}
...
Рейтинг: 0 / 0
C++ итератор как параметр функции
    #34608508
Dronord
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
батрак , нельзя. Ф-я не моя! =) Т.е. не могу её изменить. Так бы, конечно, у меня было бы
Код: plaintext
1.
2.
void f( const int &i ); // определение
f( *i ); // вызов
...
Рейтинг: 0 / 0
C++ итератор как параметр функции
    #34608532
Фотография blinded
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dronord
Код: plaintext
void f( const int &i ); // определение

Ну и к чему эта лишняя косвенность? Лучше бы по значению передал
...
Рейтинг: 0 / 0
C++ итератор как параметр функции
    #34608559
Dronord
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Коллеги, проблема решена. Спасибо Akh 'у.
blinded, у меня не int, а здоровенный объект, потому там указатель, а в моем последнем листинге ссылка.
...
Рейтинг: 0 / 0
C++ итератор как параметр функции
    #34608605
ErV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dronord wrote:

> Добрый день!
>
> Не пойму, как правильно сделать?
> #include <iostream>
> #include <vector>
>
> void f( const int *i )
> {
> std::cout << *i << std::endl;
> }
>
> int main()
> {
> std::vector<int> v;
> v.push_back(1);
> std::vector<int>::const_iterator i = v.begin();
> f( &(*i) );
> return 0;
> }
Насколько я понимаю, вот так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
 void f(const int i){
         std::cout << i << std::endl;
 }
 
 int main(){
         std::vector<int> v;
         v.push_back( 1 );
         std::vector<int>::const_iterator i = v.begin();
         f(*i);
         return  0 ;
 }
int скорее всего 32 бита, и указатель на него тоже. Так что указтель
передавать нету смысла.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
C++ итератор как параметр функции
    #34608639
ErV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пардон, поторопился с ответом, продублировал существующий. :(
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
18 сообщений из 18, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / C++ итератор как параметр функции
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]