Sizeof( int) * _vector.m_nAllocated
);
delete[] _vector.m_pData;
_vector.m_pData = pNewData;
_vector.m_nAllocated = nAllocatedNew;
}
_vector.m_pData[ _vector.m_nUsed++ ] = _data;
}
В файле с функцией main из предыдущей задачи следует удалить прежние определения структуры IntegerVector и связанных с ней функций, а вместо них включить содержимое заголовочного файла, чтобы сделать общие определения доступными:
test.сpp
#include "integer_vector.hpp"
#include <iostream>
intmain ()
{ … }
integer_vector.hpp |
integer_vector.cpp |
test.cpp |
Имея отдельные файлы объявления и реализации структуры данных для вектора целых чисел, перейдем непосредственно к решению новой задачи. В новом проекте должен быть создан подобный файл с функцией main, а файлы вектора следует подключить к проекту как уже существующие (не нужно их копировать!). Удобно размещать общие файлы программ в отдельных каталогах, доступных для нескольких проектов.
Ниже приведена реализация новой задачи. Аналогично предыдущей программе, в память сначала вводится последовательность входных данных, затем создается второй вектор, в который в цикле записываются элементы последовательности частичной суммы, которые в конце выводятся:
#include "integer_vector.hpp"
#include <iostream>
intmain ()
{
// Приглашение пользователя ко вводу
std::cout << "Input integers, stop with Ctrl+Z: ";
// Создаем и инициализируем вектор для входных данных
IntegerVector inputData;
IntegerVectorInit( inputData );
Пытаемся вводить числа с консоли одно за другим
while( true)
{
Попытка ввода числа
inttemp;
std::cin >> temp;
if( std::cin )
Просим вектор добавить новое данное в конец
IntegerVectorPushBack( inputData, temp );
Else
// Конец ввода
break;
}
// Создаем и инициализируем вектор для выходных данных
IntegerVector outputData;
IntegerVectorInit( outputData );
// Формируем последовательность частичных сумм
intcurrentSum = 0;
for( inti = 0; i < inputData.m_nUsed; i++ )
{
currentSum += inputData.m_pData[ i ];
IntegerVectorPushBack( outputData, currentSum );
}
// Выводим результаты
for( inti = 0; i < outputData.m_nUsed; i++ )
std::cout << outputData.m_pData[ i ] << ' ';
std::cout << std::endl;
// Освобождаем выделенные векторами ресурсы
IntegerVectorDestroy( inputData );
IntegerVectorDestroy( outputData );
}
Результаты выполнения программы:
Как видим, в реализации новой задачи без особых усилий была успешно повторно использована реализация задействованной структуры данных.
Дата добавления: 2016-01-29; просмотров: 602;