Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Руководство_по_C++_CLI.doc
Скачиваний:
1
Добавлен:
01.07.2025
Размер:
8.1 Mб
Скачать

Int main()

{

CCollection ^ list = gcnew CCollection;

Console::WriteLine(L"Number of Items: {0}\n", list->Count);

list->Add(224.52);

list->Add(60.48);

list->Add(1250.64);

list->Add(8.86);

list->Add(1005.36);

for(int i = 0; i < list->Count; i++)

Console::WriteLine(L"Item {0}: {1}", i + 1, list->Retrieve(i));

Console::WriteLine(L"\nNumber of Items: {0}", list->Count);

}

This would produce:

Number of Items: 0

Item 1: 224.52

Item 2: 60.48

Item 3: 1250.64

Item 4: 8.86

Item 5: 1005.36

Number of Items: 5

34.2.3 Вставка элемента в коллекцию

Вставка нового элемента в коллекцию позволяет вам добавить элемент в коллекцию, но в произвольное место, а не в конец. Перед выполнением этой операции надо проверить два момента. Во-первых, список не должен быть пуст. Во-вторых, указанная позиция должна быть допустимой, т.е. находиться в корректном диапазоне. Метод вставки можно реализовать таким образом:

using namespace System;

int MaxCount = 20;

public ref class CCollection

{

private:

array<double> ^ Item;

private:

Int size;

public:

property int Count

{

Int get() { return size; }

}

bool Add(double item);

double Retrieve(int pos);

bool Insert(double itm, int pos);

public:

CCollection();

};

CCollection::CCollection()

{

Item = gcnew array<double>(MaxCount);

size = 0;

}

bool CCollection::Add(double item)

{

if (size < 20)

{

Item[size] = item;

size++;

return true;

}

return false;

}

double CCollection::Retrieve(int pos)

{

if( (pos >= 0) && (pos <= size) )

return this->Item[pos];

return 0;

}

/* Перед выполнением этой операции проверьте, что:

1. Список не заполнен до конца

2. Указанная позиция находится в допустимом диапазоне

Вставляем новый элемент в заданную позицию и увеличиваем

размер коллекции

*/

bool CCollection::Insert(double itm, int pos)

{

/* Проверяем, можно ли вставить элемент в указанную позицию */

if( (size < 20) && (pos >= 0) && (pos <= size) )

{

/* Начиная с последнего элемента коллекции,

переписываем все элементы в следующую позицию,

вплоть до позиции вставки*/

for(int i = size; i > pos - 1; i--)

this->Item[i + 1] = this->Item[i];

/* Теперь в появившуюся свободную позицию записываем

новый элемент*/

Item[pos] = itm;

size++;

return true;

}

// Так как вставка элемента не удалась, возвращаем false

return false;

}

Int main()

{

CCollection ^ list = gcnew CCollection;

Console::WriteLine("Number of Items: {0}\n", list->Count);

list->Add(224.52);

list->Add(60.48);

list->Add(1250.64);

list->Add(8.86);

list->Add(1005.36);

for(int i = 0; i < list->Count; i++)

Console::WriteLine(L"Item {0}: {1}", i + 1,

list->Retrieve(i));

Console::WriteLine(L"\nNumber of Items: {0}\n", list->Count);

list->Insert(-707.16, 2);

for(int i = 0; i < list->Count; i++)

Console::WriteLine(L"Item {0}: {1}", i + 1, list->Retrieve(i));

Console::WriteLine(L"\nNumber of Items: {0}\n", list->Count);

}

Вывод программы:

Number of Items: 0

Item 1: 224.52

Item 2: 60.48

Item 3: 1250.64

Item 4: 8.86

Item 5: 1005.36

Number of Items: 5

Item 1: 224.52

Item 2: 60.48

Item 3: -707.16

Item 4: 1250.64

Item 5: 8.86

Item 6: 1005.36

Number of Items: 6