nixp.ru v3.0

23 января 2017,
понедельник,
21:52:28 MSK

DevOps с компанией «Флант»
anonymous написал 15 мая 2005 года в 13:31 (419 просмотров) Ведет себя неопределенно; открыл 1814 темы в форуме, оставил 5575 комментариев на сайте.

Всем доброго времени суток… Такой вот вопрос:

Вот структура упорядоченной таблицы:

struct Node {

int key;

Item *info;

};

struct Item {

int release;

char *string;

Item *next;

};

В таблице 2 столбца, в первом содержится ключ, во втором содержится указатель на информацию (на список), в списке содержится версия, информация и указатель на следующий элемент списка. В таблице могут содержаться элементы с одинаковыми ключами, но разными версиями… Так вот, вопрос: Как создать такую таблицу, если заранее известно количество записей в таблице и как потом такую таблицу удалить???

Заранее огромное спасибо!

decvar

std:map + std:vector

anonymous

И что это такое?

Olej
mamon
И что это такое?

STL (standard template library), которая с со стандарта 1998 г. является обязательной составной частью всякого С++ (если он хочет так называться ;)).

P.S. Лучшая книжка об этом — вот эта:

http://qnx.org.ru/viewthread12n1002.html

Progmaker

Моя версия:

class Item{

public:

int release;

char *string;

Item *next;

};

class Node{

public:

int key;

Item *Info;

};

class Table{

public:

Table(int);

~Table();

Node *rowz;

};

Table::Table(int rowz_n){

rowz = new Node[rowz_n];

}

Table::~Table(){

delete rowz;

}

После этого можно создавать таблицу:

Table *table1;

table1 = new Table (кол-во_строк);

Удаляется таблица так:

delete table1;

Progmaker

Улучшенный вариант:

struct Item{

int release;

char *string;

Item *next;

};

struct Node{

int key;

Item Info;

};

class Table{

public:

Table(int);

~Table();

void set_key(int indx, int key_data){rowz[indx].key = key_data;}

int get_key(int indx){return rowz[indx].key;}

void set_item_release(int indx, int ir_data){rowz[indx].Info.release=ir_data;}

int get_item_release(int indx){return rowz[indx].Info.release;}

void set_item_string(int indx, char *str_data){rowz[indx].Info.string=str_data;}

char *get_item_string(int indx){return rowz[indx].Info.string;}

private:

Node *rowz;

};

Table::Table(int rowz_n){

rowz = new Node[rowz_n];

}

Table::~Table(){

delete rowz;

}

sas
Progmaker
Улучшенный вариант:

Table::~Table(){

delete rowz;

}


Очень грубая ошибка. Надо:

delete[] rowz;

Кроме того рекомендую посмотреть в сторону «умных» указателей и использовать string вместо Си образных строк в случае с Си++.

decvar

итераторы рулят.

PS

не изобретай велосипед, а?

ecobeingecobeing.ru
Экология и вегетарианство на благо всем живым существам Планеты.