Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Контейнер 
:(
    Опции темы
interceptor
Дата 29.10.2005, 17:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Сушествует ли на MFC класс отвечающии за контейнерный тип данных
Например записать в этот контейнер какие нибудь данные(число,строка и т.д.)?



PM MAIL   Вверх
En_t_end
Дата 29.10.2005, 17:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



interceptor
Ну и причем здесь MFC ? Такой тип есть в STL.

PM MAIL ICQ Skype GTalk Jabber   Вверх
nikitao
Дата 29.10.2005, 17:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кот-программист
***


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

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



interceptor,скажем так :несмотря на то что ты используешь VC++ базовый C++ никто не отменял =>STL тоже. smile


--------------------
Жизнь - печальная штука.
PM MAIL ICQ Skype GTalk   Вверх
interceptor
Дата 29.10.2005, 20:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



может подойдут CArray, CList ,CMap
только я не могу найти полное описание на них
PM MAIL   Вверх
Mad
Дата 30.10.2005, 11:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Эксперт
Сообщений: 656
Регистрация: 18.10.2004
Где: Одесса

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



Цитата(interceptor @ 29.10.2005, 19:35)
CArray, CList ,CMap
только я не могу найти полное описание на них

читай MSDN дам все подробно и доходчего описанно


--------------------
user posted image
PM MAIL   Вверх
nikf
Дата 30.10.2005, 16:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 127
Регистрация: 6.6.2005
Где: город-герой Жирно вск

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



Цитата(interceptor @ 29.10.2005, 20:35)
может подойдут CArray, CList ,CMap

очень даже подойдут и их наследники тоже, и работать удобнее чем c stl.
Добавлено @ 16:50
Цитата(En_t_end @ 29.10.2005, 17:41)
Такой тип есть в STL.

не тип а шаблон

Это сообщение отредактировал(а) nikf - 30.10.2005, 18:41
PM MAIL   Вверх
nikf
Дата 30.10.2005, 18:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 127
Регистрация: 6.6.2005
Где: город-герой Жирно вск

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



Цитата(En_t_end @ 29.10.2005, 17:41)
Ну и причем здесь MFC ? Такой тип есть в STL.

человек про mfc спрашивал, а не про что-то smile

Это сообщение отредактировал(а) nikf - 30.10.2005, 18:42
PM MAIL   Вверх
DeadSoul
Дата 30.10.2005, 19:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



nikf, он может не подозревать про STL.


--------------------
 Если Вы получили ответ на Ваш вопрос, то нажмите на "Вопрос решен". 

Бьем спамеров их же оружием. Пусть весь спам сыпется им
[email protected] 
PM   Вверх
nikitao
Дата 30.10.2005, 19:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кот-программист
***


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

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



DeadSoul,переходить на VC++,не зная основ C++,бессмысленно,а STL является одной из таких основ.(ИМХО)


--------------------
Жизнь - печальная штука.
PM MAIL ICQ Skype GTalk   Вверх
DeadSoul
Дата 30.10.2005, 21:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



nikitao, ты невнимательно читал или я плохо объяснил. Я имел ввиду:
Человек ищет контейнер в MFC и не подозревает о существование STL, надо показать ему STL


--------------------
 Если Вы получили ответ на Ваш вопрос, то нажмите на "Вопрос решен". 

Бьем спамеров их же оружием. Пусть весь спам сыпется им
[email protected] 
PM   Вверх
Coocky
Дата 31.10.2005, 11:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


GUI гуру
****


Профиль
Группа: Участник Клуба
Сообщений: 2879
Регистрация: 16.2.2004
Где: Украина. Запорожь е

Репутация: 25
Всего: 62



Цитата

существует класс CArray, который позволяет создавать объекты, представляющие собою одномерные динамические массивы из экземпляров любого класса! Одним из огромнейших плюсов, которые присущи классу CArray, это расширение или сжатия массива по ходу выполнения программы. Больше не нужно беспокоиться о добавлении или удалении элементов массива, программисты Microsoft уже сделали это за нас (но, что немаловажно, мы должны понимать, как они это реализовали). Объявление класса CArray может быть представлено следующим образом:

template < class TYPE, class ARG_TYPE > class CArray : public CObject

Знакомые ключевые слова! Если Вы успешно вспомнили определение массива, то, надеюсь, Вы вспомните и о параметризованных классах (то есть шаблонах). Таки-да, класс CArray является параметризованным и, соответственно, параметр TYPE - определяет тип объектов, сохраняемых в массиве (к примеру, CString), а ARG_TYPE - определяет тип аргумента используемого для доступа к объектам сохраненных в массиве (к примеру, LPCTSTR ). Чаще всего, ARG_TYPE - это ссылка на TYPE. TYPE - определяет тип возвращаемых объктов из массива, а ARG_TYPE - определяет тип параметров, которые будут передаваться в массив.

Замечу, что индексация элементов в массиве, как всегда, начинается с нуля. Рассмотрим методы данного класса.

int GetSize( ) const; - возвращает размер массива.
int GetUpperBound( ) const; - возвращает индекс текущего
последнего элемента массива. Так как индексация начинается с нуля, то
значение, возвращаемое GetUpperBound, на единицу меньше от значения,
возвращаемого GetSize. Если возвращаемое значение равно -1, то это
обозначает, что массив не содержит элементов.
void SetSize( int nNewSize, int nGrowBy = -1 );
throw( CMemoryException );  - задает размер существующего или
пустого массива выделяя, при необходимости, дополнительную память
под массив.
nNewSize - новый размер массива (колличество элементов). Значение
этого аргумента должно быть большим или равным нулю.
nGrowBy - минимальное колличество элементов на которое,при
необходимости, массив будет увеличен.
Внимание: если задаваемый размер массива меньше текущего размера,
то "лишние" элементы будут удалены, а память, занимаемая ими -
освобождена. В случае ошибки при выделении памяти будет возбуждено
исключени класса CMemoryException.

Замечу, что для повышния производительности работы с массивом, желательно задать размер массива до того, как он будет использован. В противном случае, при добавлении элмента массива будет каждый раз создаваться новый массив (с колличеством элементов на 1 больше) и производиться копирование из "старого" массива в "новый", после чего "старый" будет удален. Тоесть добавления нового элемента будет осуществлять по той же технологии, которую Вы использовали при работе с динамическими массивами в курсе С++.

void FreeExtra( ); -  освобождает память, которая была
выделена при увеличении размера массива и не использована.
void RemoveAll( ); - очищает массив. Другими словами,
удаляет все элементы массива. Если перед вызовом данного метода
массив был пустым, функция все равно отработает корректно.
TYPE GetAt( int nIndex ) const; - возвращает элемент
массива, чей индекс равен nIndex. TYPE- тип, который
использовалcя при объявлении массива. Значение, которое может
принимать nIndex должно находиться в диапазоне [0; GetUpperBound].
В противоном случае - ошибка времени выполнения.
void SetAt( int nIndex, ARG_TYPE newElement ); - заносит
элемент newElement в массив под индексом nIndex. Тип ARG_TYPE
задавался при объявлении массива. Индекс nIndex должен находиться
в диапазоне от 0 до GetUpperBound.
TYPE& ElementAt( int nIndex ); - функция возвращает
временную ссылку TYPE& на элемент массива nIndex.

const TYPE* GetData( ) const;
TYPE* GetData( ); - используйте данный метод, если Вы хотите
получить непосредственный доступ к элементам массива. Если не один
из элементов не доступен, то GetData возвращает NULL.
void SetAtGrow( int nIndex, ARG_TYPE newElement );
throw( CMemoryException );  - функция аналогична рассмотренной
ранее SetAt, но имеет одну важную особенность. Если индекс nIndex
задаваемого элемента больше верхней границы, то автоматически будет
добавлен новый элемент. В случае ошибки возбуждается исключение класса
CMemoryException.

int Add( ARG_TYPE newElement );
throw( CMemoryException ); - добавляет новый элемент в конец массива,
увеличивая его размерность на 1. Если методом SetSize было задано значение
nGrowBy большее чем 1, то может быть выделена дополнительная память.
Однако, верхняя граница увеличиться только на 1. В случае неудачи -
генерируется исключение класса CMemoryException.

int Append( const CArray& src ); - добавляет содержимое одного
массив к другому, при условии что оба они содержат данные одного типа.
Если это будет необходимо, то произойдет выделение дополнительной памяти.
Функция возвращает индекс первого добавленого элемента.

void Copy( const CArray& src ); - метод позволяет скопировать
содержимое одного массива в другой.
void InsertAt( int nIndex, ARG_TYPE newElement, int nCount = 1 );
throw( CMemoryException ); - вставляет один элемент (или несколько копий
одного и того же элемента) newElement в массив под индексом nIndex. Параметр
nCount задает количество копий.

void RemoveAt( int nIndex, int nCount = 1 ); - Удаляет из массива nCount
элементов, начиная с элемента, индекс которого равен nIndex.

Естественно, за более полной справкой Вы можете обратиться в MSDN. Замечу также, что в данном классе перегружен оператор [ ], который позволяет Вам работать с объектами класса CArray точно так, как если бы Вы работали с обыкновенным массивом.


Цитата

Класс CList
Генеалогия


Данный класс, как и описанный ранее класс CArray, является одним из классов коллекции MFC и представляет из себя, по сути, реализацию динамической структуры - двухсвязный список. Элементы списка, в отличие от массива, характеризуются не индексом, а "позицией". Тип данных POSITION ("позиция") представляет из себя уникальное число, служащее для обращения к элементам списка.

Прототип класса имеет следующий вид:

template< class TYPE, class ARG_TYPE > class CList : public CObject

где TYPE - тип объектов, сохраняемых в списке; ARG_TYPE - тип, используемый для ссылки на объекты, которые хранятся в списке, может быть ссылкой.

Инициализация

CList( int nBlockSize = 10 );
// Выделяет память под nBlockSize элементов списка.

Доступ к голове и хвосту списка

TYPE& GetHead( );
TYPE GetHead( ) const;
// Возвращает элемент (или ссылку на него) из головы списка.

TYPE& GetTail( );
TYPE GetTail() const;
// Возвращает элемент (или ссылку на него) из хвоста списка.

// Во всех описанных случаях список не должен быть пустым.

Операции

TYPE RemoveHead( );
// Удаление элемента из головы списка. Возвращает предыдущий головной
// элемент списка.

TYPE RemoveTail( );
// Удаление элемента из хвоста списка. Возвращает предыдущий хвостовой
// элемент списка.

POSITION AddHead( ARG_TYPE newElement );
void AddHead( CList* pNewList );
// Добавляет элемент в голову списка.
// ARG_TYPE - шаблонный тип, определяющий тип элементов списка (может
// быть ссылкой);
// newElement - новый элемент списка;
// pNewList - указатель на другой список.

// Первая функция возвращает позицию добавленного элемента.

POSITION AddTail( ARG_TYPE newElement );
void AddTail( CList* pNewList );
// Добавляет элемент в хвост списка.
// См. предыдущую функцию.

void RemoveAll( );
// Удаляет все элементы списка и освобождает ассоциированную с ним память.

Итерации

POSITION GetHeadPosition( ) const;
// Возвращает позицию головы списка или NULL, если список пуст.

POSITION GetTailPosition( ) const;
// Возвращает позицию хвоста списка или NULL, если список пуст.

TYPE& GetNext( POSITION& rPosition );
TYPE GetNext( POSITION& rPosition ) const;
// Возвращается элемент, заданный в параметре rPosition. Затем в этот
// параметр записывается позиция следующего элемента списка или NULL,
// если вновь полученный элемент - последний в списке.

TYPE& GetPrev( POSITION& rPosition );
TYPE GetPrev( POSITION& rPosition ) const;
// Возвращается элемент, заданный в параметре rPosition. Затем в этот
// параметр записывается позиция предыдущего элемента списка или NULL,
// если вновь полученный элемент - первый в списке.

Получение/модификация

TYPE& GetAt( POSITION position );
TYPE GetAt( POSITION position ) const;
// Возвращает элемент (или ссылку на него), заданный в параметре position.

void SetAt( POSITION pos, ARG_TYPE newElement );
// Устанавливает значение newElement в позиции списка pos.

void RemoveAt( POSITION position );
// Удаляет элемент списка, заданный в параметре position.

Вставка

POSITION InsertBefore( POSITION position, ARG_TYPE newElement );
// Вставка нового элемента списка (newElement) до элемента, заданного
// в параметре position. Возвращается позиция вставленного элемента.

POSITION InsertAfter( POSITION position, ARG_TYPE newElement );
// Вставка нового элемента списка (newElement) после элемента, заданного
// в параметре position. Возвращается позиция вставленного элемента.

Поиск

POSITION Find( ARG_TYPE searchValue, POSITION startAfter = NULL) const;
// Поиск заданного элемента (searchValue), начиная с позиции startAfter.
// Возвращается позиция найденного элемента или NULL, если элемент не
// найден.

POSITION FindIndex( int nIndex ) const;
// Получение позиции элемента списка по заданному индексу (nIndex).
// Возвращается позиция элемента или NULL, если элемент не найден.

Статус

int GetCount() const;
// Возвращается количество элементов в списке.

BOOL IsEmpty( ) const;
// Возвращается истина, если список пуст, и 0 - в противном случае.




--------------------
Верю в смерть после жизни, в любовь после секса ,в крем после бритья smile        
PM ICQ   Вверх
En_t_end
Дата 31.10.2005, 13:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(nikf @ 30.10.2005, 20:49)
не тип а шаблон

Именно.
PM MAIL ICQ Skype GTalk Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Visual C++/MFC/WTL | Следующая тема »


 




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


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

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