Модераторы: bsa

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> unsigned, int, size_t 
:(
    Опции темы
User008
Дата 13.10.2009, 17:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 306
Регистрация: 9.9.2009

Репутация: нет
Всего: 1



Каким типом лучше всего передавать индекс массива в функцию?
PM MAIL   Вверх
zim22
Дата 13.10.2009, 18:09 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


depict1
****


Профиль
Группа: Завсегдатай
Сообщений: 2682
Регистрация: 15.1.2009
Где: Украина

Репутация: 29
Всего: 69



Цитата(User008 @  13.10.2009,  17:55 Найти цитируемый пост)
Каким типом лучше всего передавать индекс массива в функцию?

ptrdiff_t


--------------------
PM MAIL   Вверх
User008
Дата 13.10.2009, 18:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 306
Регистрация: 9.9.2009

Репутация: нет
Всего: 1



в цикле тоже его использовать?
PM MAIL   Вверх
zim22
Дата 13.10.2009, 18:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


depict1
****


Профиль
Группа: Завсегдатай
Сообщений: 2682
Регистрация: 15.1.2009
Где: Украина

Репутация: 29
Всего: 69



Цитата(User008 @  13.10.2009,  18:15 Найти цитируемый пост)
в цикле тоже его использовать?

угу
почитай здесь


--------------------
PM MAIL   Вверх
niXman
Дата 13.10.2009, 18:24 (ссылка)   | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 211
Регистрация: 4.7.2009

Репутация: нет
Всего: 0



Цитата(zim22 @  13.10.2009,  16:09 Найти цитируемый пост)
ptrdiff_t 

а если в перегруженный оператор индекса?

мое ИМХО, size_t
--------------------
if ( !c++ ) {   *power--;   this->wussiness += 10;}
PM MAIL   Вверх
zim22
Дата 13.10.2009, 18:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


depict1
****


Профиль
Группа: Завсегдатай
Сообщений: 2682
Регистрация: 15.1.2009
Где: Украина

Репутация: 29
Всего: 69



Цитата(niXman @  13.10.2009,  18:24 Найти цитируемый пост)
а если в перегруженный оператор индекса?
мое ИМХО, size_t

 smile 
рассмотри все 3 случая оператора индекса.
ссылка на объяснения.
Код

class String {
 public:
  String();
  //char& operator[](size_t);   
  //char& operator[](unsigned int);   
  //char& operator[](ptrdiff_t);   
  operator const char*();    
};

String s;
char c = s[0];



--------------------
PM MAIL   Вверх
User008
Дата 13.10.2009, 20:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 306
Регистрация: 9.9.2009

Репутация: нет
Всего: 1



Цитата(zim22 @ 13.10.2009,  18:24)
Цитата(User008 @  13.10.2009,  18:15 Найти цитируемый пост)
в цикле тоже его использовать?

угу
почитай здесь

warning C4018: '<' : signed/unsigned mismatch
При сравнении с size() контейнеров.
PM MAIL   Вверх
bsa
Дата 14.10.2009, 20:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



User008, а ты не задумывался над вопросом, почему так происходит? Может потому, что для работы с контейнерами лучше подходят итераторы?

Это сообщение отредактировал(а) bsa - 14.10.2009, 20:28
PM   Вверх
User008
Дата 14.10.2009, 21:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 306
Регистрация: 9.9.2009

Репутация: нет
Всего: 1



Наверно лучше. А что делать, если контейнеры с произвольным доступом обрабатываются через индексы? Или работа с контейнерами должна быть исключительно через итераторы?
PM MAIL   Вверх
bsa
Дата 14.10.2009, 22:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



Цитата(User008 @ 14.10.2009,  21:02)
Наверно лучше. А что делать, если контейнеры с произвольным доступом обрабатываются через индексы? Или работа с контейнерами должна быть исключительно через итераторы?

Если ты сравниваешься с size(), то скорее всего у тебя идет последовательный перебор. В этом случае итераторы предпочтительней. Индексы удобней когда тебе необходим СЛУЧАЙНЫЙ доступ.
PM   Вверх
Andrey44
Дата 15.10.2009, 06:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1501
Регистрация: 4.12.2006
Где: На работе

Репутация: 2
Всего: 26



Тип ptrdiff_t - базовый знаковый целочисленный тип языка Си/Си++. Размер типа выбирается таким образом, чтобы в него можно было записать максимальный размер теоретически возможного массива. На 32-битной системе ptrdiff_t будет занимать 32-бита, на 64-битной - 64-бита. Как и в size_t в переменную типа ptrdiff_t может быть безопасно помещен указатель, за исключением указателя на функцию класса. Также ptrdiff_t является результатом выражения, где один указатель вычитается из другого (ptr1-ptr2). Тип ptrdiff_t обычно применяется для счетчиков циклов, индексации массивов, хранения размеров, адресной арифметики.

Добавлено через 47 секунд
Тип size_t - базовый беззнаковый целочисленный тип языка Си/Си++. Является результатом выполнения оператора sizeof. Размер типа выбирается таким образом, чтобы в него можно было записать максимальный размер теоретически возможного массива. Например, на 32-битной системе size_t будет занимать 32-бита, на 64-битной - 64-бита. Другими словами в переменную типа size_t может быть безопасно помещен указатель. Исключение составляют указатели на функции классов, но это особый случай. Тип size_t обычно применяется для счетчиков циклов, индексации массивов, хранения размеров, адресной арифметики.


--------------------
????? ??, ??????? ?????.  smile 
PM MAIL WWW ICQ   Вверх
niXman
Дата 15.10.2009, 07:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 211
Регистрация: 4.7.2009

Репутация: нет
Всего: 0



Andrey44, Это цитаты?
Ваше мнение какое?
--------------------
if ( !c++ ) {   *power--;   this->wussiness += 10;}
PM MAIL   Вверх
Andrey44
Дата 15.10.2009, 08:13 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1501
Регистрация: 4.12.2006
Где: На работе

Репутация: 2
Всего: 26



niXman, ptrdiff_t - я бы использовал для арифметики с указателями, а size_t соответственно для индексации.


--------------------
????? ??, ??????? ?????.  smile 
PM MAIL WWW ICQ   Вверх
bsa
Дата 18.10.2009, 18:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



Цитата(Andrey44 @  15.10.2009,  06:53 Найти цитируемый пост)
Исключение составляют указатели на функции классов, но это особый случай.
Это еще почему? Любой указатель в Си и С++ может быть сохранен в указателе на void (void*). Т.е. указатель на void имеет наибольший размер из всех видов указателей. Указатель на функцию-член имеет такой же размер, как и указатель на обычную функцию. Другое дело, что в некоторых диалектах С++ (Borland C++ Builder) есть специальные модификаторы (__closure), с помощью которых можно получить указатель на метод, который хранит в себе еще и указатель на объект класса... Но это нестандартные расширения и в официальном стандарте они отсутствуют (комитет по стандартизации отклонил предложение Borland о внесении его в стандарт).

PM   Вверх
GoldFinch
Дата 18.10.2009, 19:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Завсегдатай
Сообщений: 2141
Регистрация: 30.11.2008

Репутация: 6
Всего: 26



Цитата(bsa @  18.10.2009,  19:33 Найти цитируемый пост)
Любой указатель в Си и С++ может быть сохранен в указателе на void (void*). Т.е. указатель на void имеет наибольший размер из всех видов указателей. Указатель на функцию-член имеет такой же размер, как и указатель на обычную функцию.

sizeof(void*)  != sizeof(void(Foo::*)())
void(Foo::*)() нельзя преобразовать к void*
PM MAIL ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0544 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.