Шаг 58 - Массивы в MFC

Создание проекта

Простое консольное приложение Win32 c поддержкой MFC.

58_1.gif (5701 b)

Создаем код

#include "stdafx.h"
#include "58.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// The one and only application object

CWinApp theApp;
using namespace std;
#define MaxArray 120 // количество элементов
CUIntArray array; // объявили массив
int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
{
int nRetCode = 0;
// initialize MFC and print and error on failure
if (!AfxWinInit(::GetModuleHandle(NULL), NULL, ::GetCommandLine(), 0))
{
// TODO: change error code to suit your needs
cerr << _T("Fatal Error: MFC initialization failed") << endl;
nRetCode = 1;
}
else
{
// TODO: code your application's behavior here.
CString strHello;
strHello.LoadString(IDS_HELLO);
cout << (LPCTSTR)strHello << endl;
UINT x;
array.SetSize(1,1); // начальный размер
for (x=1;x<(MaxArray+1);x++) array.Add(x); // добавляем элементы
for (x=1;x<(MaxArray+1);x++) cout << array.GetAt(x)<< endl; // получаем элементы
cout << " Size " << array.GetSize() << endl; // размер
array.RemoveAll(); // очишаем массив
cout << " Size new " << array.GetSize() << endl; // новый размер
}
return nRetCode;
}

Вот так будет выглядеть результат.

58_2.gif (4571 b)

Описание

Массив CUIntArray поддерживает работу с переменными типа UINT. Вначале мы устанавливаем размер массива с использованием SetSize, вот её описание. Первая переменная - это размер массива, вторая - приращение массива при увеличении элементов. От этих двух переменных зависит дефрагментация памяти при работе с массивом.

void SetSize( int nNewSize, int nGrowBy = -1 ); throw( CMemoryException );

Для добавления элементов к массиву используется функция Add. Эта функция используется в массивах разных типов, и поэтому её описание очень общее.

int Add( CObject* newElement ); throw( CMemoryException );

Функция GetAt возвращает значение элемента.

CObject* GetAt( int nIndex ) const;

Для получения размера массива необходимо использовать GetSize.

int GetSize() const;

RemoveAll очищает массив от всех элементов.

Это только один из типов массивов, на самом деле, в MFC находится много классов массивов. Вот они.

CByteArray 
CDWordArray
CObArray
CPtrArray
CUIntArray
CWordArray
CStringArray

Работа с ними в MFC практически одинакова. Трудности могут возникнуть, только если вы определите свой класс переменной для хранения в массиве. Тогда для работы вам понадобится класс CArray.

Шпаргалка

В MFC реализованы классы массивов.


Загрузить проект | Предыдущий Шаг | Следующий Шаг | Оглавление
Автор Каев Артем - 8.10.99 (обновлено 15.07.2001)