Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
LectionSTL3.doc
Скачиваний:
1
Добавлен:
12.11.2019
Размер:
367.62 Кб
Скачать

Inventory Inv("Books",40.12,5);

Vector1.Push_back(Inv);

При запуске данной программы мы получим следующий результат:

Constructor 1

Copy constructor 2

Destructor 1

Destructor 0

Размер контейнера vector1 стал равным единице, т.е. он содержит один элемент. В тоже время из работы программы видно, что создается два объекта, причем, используется конструктор копирования, а это говорит о том, что создается копия объекта, которая помещается в контейнер. Это является демонстрацией того, что в контейнер помещаются копии объектов. Можно и далее продолжать вставку элементов в конец контейнера:

std::vector<inventory> vector1;

inventory Inv("Books",40.12,5);

vector1.push_back(Inv);

vector1.push_back(inventory());

vector1.push_back(inventory("Tables",50.12,20));

vector1.push_back(inventory("fruirs",4.23,150));

vector1.push_back(inventory("vegetables",3.12,200));

Заметим, что количество элементов в контейнере стало равно пяти, но если мы вызовем метод capacity(), то результат будет равен шести. Это значит, что шестой элемент может быть добавлен без перераспределения памяти.

Вывести в файл содержание контейнера можно следующим образом:

std::ofstream fout("test1.dat");

if(fout.is_open()!=true)

{

std::cout << "Can't open file!!" << std::endl;

return 1;

}

for(int i=0; i<vector1.size();i++)

{

fout << vector1.at(i);

}

Обратите внимание на последнюю строку кода. Здесь элементы контейнера индексируются при помощи метода at(). Однако, более правильным будет следующий подход:

for(std::vector<inventory>::iterator itr=vector1.begin(); itr!=vector1.end();++itr)

{

fout << *itr;

}

В данном подходе мы объявляем переменную типа итератор контейнера vector<inventory>, а именно std::vector<inventory>::iterator и инициализируем ее итератором того же типа, указывающим на начало контейнера.

Результат вывода будет следующим:

Books 40.12 5

Nothing 0 0

Tables 50.12 20

fruirs 4.23 150

vegetables 3.12 200

Можно также осуществить вставку объекта в середину последовательности. Для этого рассмотрим следующий код:

std::vector<inventory> vector1;

inventory Inv("Books",40.12,5);

vector1.push_back(Inv);

vector1.push_back(inventory());

vector1.push_back(inventory("Tables",50.12,20));

vector1.push_back(inventory("fruirs",4.23,150));

vector1.push_back(inventory("vegetables",3.12,200));

std::vector<inventory>::iterator ptr= vector1.insert(vector1.end()-1,inventory());

std::cout << *ptr << std::endl;

vector1.insert(ptr,3,Inv);

//std::cout << *ptr << std::endl;

std::cout << vector1.size() << std::endl;

std::cout << vector1.capacity() << std::endl;

После того, как мы вставили в конец контейнера пять элементов, мы добавили в середину контейнера, а именно в позицию, находящуюся перед последним элементом, один объект, созданный конструктором по умолчанию. Место нахождения вставленного объекта сохранено в переменной ptr. Для того, чтобы убедиться, что это вставленный объект, результат выведен на экран. Далее мы вставили еще три копии объекта Inv перед позицией, на которую указывает ptr. Результат работы программы выглядит следующим образом:

Books 40.12 5

Nothing 0 0

Tables 50.12 20

fruirs 4.23 150

Books 40.12 5

Books 40.12 5

Books 40.12 5

Nothing 0 0

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]