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

Нужен пример объявления структуры - C++

Восстановить пароль Регистрация
 
Don't
9 / 9 / 3
Регистрация: 12.03.2011
Сообщений: 39
02.01.2012, 21:50     Нужен пример объявления структуры #1
прошу помощи разобраться
любая структура
C++
1
2
3
4
5
struct human
{
  int age;
  int height;
};
если я знаю какое именно количество будет людей, то проблем нету..
если не известное количество, и по ходу выполнению программы добавляются, проблема возникает

пару вариантов:
1)
C++
1
vector<human> example;
и он якобы сам изменяется при добавлении элементов.. это не совсем устраивает..

который надо:
2) использования списков..
броздя форумом, видел как используют указатели, но начинаешь путаться, когда один говорит так,а другой отвечающему противоречит..
и в каждой теме бывает реализация... и становится хаос в голове..

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

заранее благодарен
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.01.2012, 21:50     Нужен пример объявления структуры
Посмотрите здесь:

Нужен пример интерфейса C++
Легкий пример про структуры C++
Передача структуры без объявления переменной C++
Пример структуры для изучения C++
C++ Нужен пример с массивами С++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
go
Эксперт C++
3582 / 1362 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
02.01.2012, 22:03     Нужен пример объявления структуры #2
Самый просто вариант для понимания с помощью временной переменной.
Вот пример, сделаете через циклы
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
#include <iostream>
#include <vector>
 
using namespace std;
 
typedef struct human
{
  int age;
  int height;
} human_t;
 
int main ()
{
    vector <human_t> v;
    human_t t;
    
    t.age = 5;
    t.height = 10;
    
    v.push_back (t);
    
    t.age = 55;
    t.height = 20;
    
    v.push_back (t);
    
    cout << v[0].age << " " << v[0].height << endl;
    cout << v[1].age << " " << v[1].height << endl;
}
Don't
9 / 9 / 3
Регистрация: 12.03.2011
Сообщений: 39
02.01.2012, 22:07  [ТС]     Нужен пример объявления структуры #3
спасибо, этот вариант я понимаю, но он меня не устраивает

хочу понять с использованием списков (если корректно выразился.. )
vetal10
35 / 35 / 5
Регистрация: 25.05.2010
Сообщений: 211
02.01.2012, 22:35     Нужен пример объявления структуры #4
C++
1
list<human>
если ты про етот список. то схема действий с ним примерно такая же как и с вектором ,показанная го.
только до произвольного елемента ты не сможешь добраться нужно использовать итераторы.
вот смотри тут
http://www.cplusplus.com/reference/stl/list/
rangerx
1908 / 1517 / 139
Регистрация: 31.05.2009
Сообщений: 2,876
02.01.2012, 23:11     Нужен пример объявления структуры #5
Цитата Сообщение от Don't Посмотреть сообщение
что прошу..
чтобы привели пример объявления, присвоение значения (и как при этом меняется указатель)
Односвязный список это цепочка однотипных структур, каждая из которых хранит как сами данные хранящиеся в списке, так и адрес следующей такой структуры. Ниже простой пример такого списка
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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
#include <iostream>
 
//----------
 
template<typename T>
struct node
{
    T data; // данные хранящиеся в списке
    node* next; // указатель на следующий элемент
};
 
//----------
 
struct human
{
    int age;
    int height;
};
 
//----------
 
int main()
{
    // выделяем память под первый элемент списка и присваиваем значения хранящимся в нём данным
    node<human>* first_node = new node<human>();
    first_node->data.age = 1;
    first_node->data.height = 1;
    // второму элементу списка присваиваем нулевой адрес(признак конца списка)
    first_node->next = NULL;
 
    // выводим список на экран(перебираем все указатели пока не доберёмся до нулевого)
    for(node<human>* p = first_node; p != NULL; p = p->next)
        std::cout << p->data.age << ", " << p->data.height << std::endl;
    std::cout << std::endl;
 
    //---------------
 
    // всё то же самое для второго элемента списка
    first_node->next = new node<human>(); // выделяем память под второй элемент списка
    first_node->next->data.age = 2;
    first_node->next->data.height = 2;
    first_node->next->next = NULL; // третий элемент равен NULL(признак конца списка)
 
    for(node<human>* p = first_node; p != NULL; p = p->next)
        std::cout << p->data.age << ", " << p->data.height << std::endl;
    std::cout << std::endl;
 
    //-----------------
 
    // для третьего
    first_node->next->next = new node<human>(); // выделяем память под третий элемент списка
    first_node->next->next->data.age = 3;
    first_node->next->next->data.height = 3;
    first_node->next->next->next = NULL; // четвёртый элемент равен NULL(признак конца списка)
 
    for(node<human>* p = first_node; p != NULL; p = p->next)
        std::cout << p->data.age << ", " << p->data.height << std::endl;
    std::cout << std::endl;
}
естественно, в реальной программе все действия со списком(добавление, удаление, вставка...) автоматизируется c помощью функций.
go
Эксперт C++
3582 / 1362 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
02.01.2012, 23:24     Нужен пример объявления структуры #6
rangerx, имелось ввиду действие со стандартным контейнером list
BUMER
 Аватар для BUMER
157 / 12 / 0
Регистрация: 01.04.2009
Сообщений: 103
02.01.2012, 23:28     Нужен пример объявления структуры #7
go, в стандартном контейнере работа с указателями не требуется, а просили объяснить именно ее.
rangerx, в общем-то все правильно рассказал, но пример далеко не из простых. Если все понятно, то хорошо, если нет - Don't, дай знать.
Don't
9 / 9 / 3
Регистрация: 12.03.2011
Сообщений: 39
02.01.2012, 23:28  [ТС]     Нужен пример объявления структуры #8
go,
неа, rangerx, описал вроде то что я хотел, сейчас буду разбираться
go
Эксперт C++
3582 / 1362 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
02.01.2012, 23:32     Нужен пример объявления структуры #9
BUMER, проще с итераторами

Don't, тогда при чем здесь вектор?

P. S. Списки бывают разные.
BUMER
 Аватар для BUMER
157 / 12 / 0
Регистрация: 01.04.2009
Сообщений: 103
02.01.2012, 23:41     Нужен пример объявления структуры #10
go, я знаю, что проще. но во всех образовательных программах на первых порах запрещают пользоваться библиотекой стандартных шаблонов
Don't
9 / 9 / 3
Регистрация: 12.03.2011
Сообщений: 39
02.01.2012, 23:47  [ТС]     Нужен пример объявления структуры #11
go,
чуток промахнулся, написал лишь что вариант с вектором не устраивает, а то что я понял не описал

rangerx,
спасибо понятно,

но нюанс,разобрано добавлению добавлению по элементу списка,
к примеру бы будем иметь цикл, в котором добавляются элементы,
для универсальности нужно будет создать что-то типо "указателя"?, и его менять каждый при каждом проходе.
__

я попросил описать, 2й вариант
ибо под таким способом, который описывал go,
я увидел критики много, по этому решил что 2й вариант более правильный

соответственно назревает вопрос какой метод является лучшим, заметно сразу, что 1й на много проще
BUMER
 Аватар для BUMER
157 / 12 / 0
Регистрация: 01.04.2009
Сообщений: 103
02.01.2012, 23:49     Нужен пример объявления структуры #12
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
struct human
{
  int age;
  int height;
};
 
struct node
{
    human data; // данные хранящиеся в списке
    node* next; // указатель на следующий элемент
};
 
int main()
{
    node* head = new node;
    head->data.age=1;
    head->data.height=1;
    head->next=0;
    node *p=head;
    for(int i=0;i<4;i++)
    {
        node *n = new node;
        //заполнение поля data
        n->next=p->next; 
        p=n;
    }
}
вот попроще кусочек. в итоге получится список из 5-ти элементов. указатель последнего равен 0 (признак конца списка).
важно: в конце программы не забудь удалить динамически взятую память. процесс удаления похож на создание.
Don't
9 / 9 / 3
Регистрация: 12.03.2011
Сообщений: 39
03.01.2012, 00:10  [ТС]     Нужен пример объявления структуры #13
спасибо всем
при повторном просмотре заметил, что и rangerx описан цикл с указателям..

но в итоге , есть ли недостатки у 1го способа перед вторым?
и предпочтительнее использовать его?
BUMER
 Аватар для BUMER
157 / 12 / 0
Регистрация: 01.04.2009
Сообщений: 103
03.01.2012, 00:17     Нужен пример объявления структуры #14
Don't, используется обычно первый способ. но, как я писал, в обучающих целях, чтоб понимать, что вообще происходит, нужно сначала освоить второй.
go
Эксперт C++
3582 / 1362 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
03.01.2012, 10:44     Нужен пример объявления структуры #15
Ну вот написал не сложный вариант, если самому реализовывать
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
42
43
44
45
46
47
48
49
50
51
#include <iostream>
 
using namespace std;
 
const int MAX_SIZE = 100;
 
typedef struct human
{
  int age;
  int height;
} human_t;
 
template <class T>
class queue {
private:
    T q[MAX_SIZE];
    int sloc, rloc;
public:
    queue () { sloc = rloc = 0; }
    void qput (T val) {
        if ( sloc == MAX_SIZE ) {
            cout << " QUEUE filled with " << endl;
            return ;
        }
        q[++sloc] = val;
    }
    T* qget() {
        if ( rloc == sloc ) {
            cout << " QUEUE 0 " << endl;
            return NULL;
        }
        return &q[++rloc] ;
    }
};
 
int main(int argc, char* argv[])
{
    queue<human_t> q;
    human_t t, *tt;
 
    cin >> t.age >> t.height;
    q.qput(t);
 
    tt = q.qget();
 
        if ( tt )
        cout << tt->age << " " << tt->height << endl;
 
    system ("pause");
    return 0;
}
Добавлено через 4 минуты
Кстати, очередь LIFO.
rangerx
1908 / 1517 / 139
Регистрация: 31.05.2009
Сообщений: 2,876
03.01.2012, 17:57     Нужен пример объявления структуры #16
Цитата Сообщение от Don't Посмотреть сообщение
но в итоге , есть ли недостатки у 1го способа перед вторым?
и предпочтительнее использовать его?
Стандартная библиотека для того и существует чтобы ей активно пользоваться(std::forward_list односвязный список, std::list двусвязный), но для учёбы конечно лучше написать свои версии стандартных структур данных. Вообще, я бы советовал начать с самого простого - со стека, затем можно реализовать очередь, и только потом браться за список и всё остальное.
Цитата Сообщение от go Посмотреть сообщение
Кстати, очередь LIFO.
FIFO LIFO это стек.
go
Эксперт C++
3582 / 1362 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
03.01.2012, 18:43     Нужен пример объявления структуры #17
Цитата Сообщение от rangerx Посмотреть сообщение
FIFO LIFO это стек.
Да, перепутал. Это обычная очередь. First In, First Out первым пришёл — первым ушёл

Добавлено через 9 минут
Цитата Сообщение от rangerx Посмотреть сообщение
но для учёбы конечно лучше написать свои версии стандартных структур данных.
В С++ очень много удобства дает библиотека STL. Отказываться от нее, ИМХО, глупо.

Цитата Сообщение от rangerx Посмотреть сообщение
и только потом браться за список
Списки бывают разные: однонаправленные, двунаправленные, кольцевые и т.д. Какие необходимо автору темы - загадка (он так и не уточнил).
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.01.2012, 09:23     Нужен пример объявления структуры
Еще ссылки по теме:

C++ Нужен пример написания DLL
C++ Нужен пример класса
Нужен пример классов C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
04.01.2012, 09:23     Нужен пример объявления структуры #18
Цитата Сообщение от go Посмотреть сообщение
В С++ очень много удобства дает библиотека STL. Отказываться от нее, ИМХО, глупо.
Но всё же лучше в полной мере понимать, как устроены и как работают фундаментальные структуры данных и алгоритмы. А в полной мере понять это лучше всего моэно, если самостоятельно реализовать их.
Yandex
Объявления
04.01.2012, 09:23     Нужен пример объявления структуры
Ответ Создать тему
Опции темы

Текущее время: 15:42. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru