Форум программистов, компьютерный форум CyberForum.ru

Непрерывное выделение памяти - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ считать строку чисел в массив http://www.cyberforum.ru/cpp-beginners/thread822936.html
#include <sstream> #include <string> #include <iostream> using std::cout; using std::string; using std::istringstream; using std::endl; #define TICK 12 #define RATE 7 #define iRATE int i=0; i<RATE; i++
C++ Три числа в порядке возрастания Только начинаю программировать в Borland C++. Нужно три введенных числа, упорядочить по возрастанию. #include <iostream.h> #include <conio.h> int main() { int a,b,c; cout<< "vvedite tri chisla= ";endl; cin>>a; http://www.cyberforum.ru/cpp-beginners/thread822935.html
Вычислить первый целый корень из последовательности C++
Доброе время суток! Задали задачку - написать программу, которая из последовательности чисел выбирает первое число, корень которого - целый. Например, последовательность чисел от 30 до 80 первое число -36. Нужно сделать через цикл for. Мой вариант кода: #include <iostream> #include <cmath> using namespace std; int main() { int a, b,i; double drob, cel, j; cout << "Enter:" ; ...
Рекурсия. Напечатать в обратном порядке заданный текст C++
Помогите плз. Нужно напечатать в обратном порядке заданный текст (за текстом следует точка), используя механизм рекурсии и через цикл.
C++ сортировка массивов http://www.cyberforum.ru/cpp-beginners/thread822927.html
Дан массив чисел произвольной длины. Отсортировать массив вставкой и быстрой сортировками. Определить число сравнений и перемещений (перестановок с одного места на другое) элементов в процессе выполнения программы. Для тестирования программы заполнять массив значениями тремя спосо-бами: по возрастанию, по убыванию, случайным образом. Каждый метод сортировки, каждый способ заполнения массивов...
C++ Алгоритм Прима Здравствуйте! Я пишу программу для нахождения минимального каркаса в графе. Делаю я это с помощью алгоритма Прима. Граф задан матрицей смежности. Алгоритм, честно скажу взял с нета и немного переделал под свой граф, но он не работает, подскажите, где я ошибся. Спасибо!!! bool used; int min_e,sel_e; min_e=0; for(int i=0;i<N;++i) { int v=-1; for (int j=0; j<N; ++j)... подробнее

Показать сообщение отдельно
anmartex
...
 Аватар для anmartex
1699 / 1192 / 494
Регистрация: 12.02.2013
Сообщений: 1,978
31.03.2013, 16:15     Непрерывное выделение памяти
Хм... То что будет написано ниже, это чисто моё субъективное мнение и вполне возможно ошибочное. Но, смею всё же изложить его:

Суть метода заключается в том, чтобы выделить непрерывную память для вектора ваших объектов Char_vec, но использовать её непосредственно для вектора element. Т.е. при выделении память под 1 объект класса Char_vec будет выделено 5, но с учётом выравнивания - 8 байт. Теперь мы вычисляем сколько необходимо памяти, т.е. под сколько объектов класса Char_vec нужно выделить память:
C++
1
size_t count = (sizeof(int) + s) / sizeof(Char_vec) + 1;
Всё, теперь можем использовать наш ЕДИНСТВЕННЫЙ объект, всё остальное - это память для поля element. Единственное что необходимо помнить, объект нужно удалять как вектор, т.е. delete[].
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
#include <iostream>
 
class Char_vec
{
   protected:
      int sz;
      char element[1];
 
   public:
      static Char_vec* new_char_vec(int s)
      {
         size_t count = (sizeof(int) + s) / sizeof(Char_vec) + 1;
         Char_vec* vec = new Char_vec[count];
         vec->sz = s;
 
         return vec;
      }
      char& operator[](int i){return element[i];}
};
 
 
int main()
{
   int count = 20;
 
   Char_vec* vec = Char_vec::new_char_vec(count);
 
   for (int i = 0; i < count; ++i)
   {
      (*vec)[i] = 32 + i;
   }
 
   for (int i = 0; i < count; ++i)
   {
      std::cout << (*vec)[i] << " ";
   }
 
   delete[] vec;
 
   return 0;
}
P.S.: для не POD объектов я не решусь определить поведение.
 
Текущее время: 01:20. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru