Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  

Показать сообщение отдельно
pva pva вне форума

Аватара для pva

Ветеран


Сообщения: 1180
Благодарности: 279

Профиль | Отправить PM | Цитировать


если уж билдер 6, то это достаточно продвинутый компилятор, чтобы использовать шаблоны с++. Есть например такой: vector<typename T>
Код: Выделить весь код
#include <vector>
#include <fstream>
using namespace std;

void myFunc()
{
   vector<double> fdoubles(100, 0.);
   // создан объект std::vector<double>,
   // представляющий собой обычный массив из 100 элементов
   // и инициализирован значением 0.0
   // объект будет уничтожен автоматически при выходе из блока
   // для работы с памятью используется класс std::allocator<double>.
   // тот, который по умолчанию использует операторы new и delete[],
   // но можно их переопределить (но лучше не трогать, если нет острой необходимости)

   // работаем как с обычным массивом:
   fdoubles[0] = 3.14;     
   fdoubles[1] = 123.23;

   // если нужна проверка границ:
   fdoubles.at(0) = 3.14;     
   fdoubles.at(101) = 123.23; // здесь вылетит с исключением std::out_of_range

   // меняем размер, если надо, память перераспределяется автоматически
   // но так, что если просишь меньше, то не освобождается, а просто берётся меньше
   // из уже выделенного куска. Например:
   fdoubles.resize(50);   // используется кусок из 100*sizeof(double)
   fdoubles.resize(200); // используется кусок из 200*sizeof(double) 
}

vector<double> readData()
{
   // работа с памятью оптимизирована для добавления небольших объектов.
   // то есть это идеальный класс для использования в качестве буфера чтения (небольших объектов)
   // и использования индексации.

   ifstream input("my_data.txt");
   double buf;
   vector<double> result;
   while(input>>buf) result.push_back(buf);

   return result;
}

// TList в делфи - это аналог vector<void*>
Это сообщение посчитали полезным следующие участники:

Отправлено: 22:26, 28-02-2007 | #13