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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Don't
9 / 9 / 3
Регистрация: 12.03.2011
Сообщений: 39
#1

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

02.01.2012, 21:50. Просмотров 994. Ответов 17
Метки нет (Все метки)

прошу помощи разобраться
любая структура
C++
1
2
3
4
5
struct human
{
  int age;
  int height;
};
если я знаю какое именно количество будет людей, то проблем нету..
если не известное количество, и по ходу выполнению программы добавляются, проблема возникает

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

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

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

заранее благодарен
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.01.2012, 21:50
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Нужен пример объявления структуры (C++):

Передача структуры без объявления переменной - C++
здравствуйте форумчане. вопрос мой таков: имеется структура struct Rect { Point LTPoint,RBPoint; } Point-структура...

Что означает имя переменной в конце объявления структуры? - C++
Всем привет. Что значит такая запись в конце структуры? }*head; И что было бы, если было бы так: }head;? struct Link ...

Что означает слово struct внутри объявления структуры? - C++
Допустим объявляю структуру следующим образом: struct element{ int id; struct element* next; }; Что означает в данном...

Пример структуры для изучения - C++
Пожалуйста,приведите пример структуры для разбора,сначала пробовал смотреть чужие темы на эту тему на форуме,но там у всех со своими...

Легкий пример про структуры - C++
Задача заключается в том чтобы присвоить значения переменной х и всем объектам к которым она имеет отношение.

Указатели на структуры. Программа-пример из книги Шилдта - C++
Здравствуйте. Прошу проверить, правильно ли я поняла значение каждой строчки, т.к. в книге построчного объяснения не дается. Еще хотелось...

17
go
Эксперт С++
3586 / 1366 / 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;
}
1
Don't
9 / 9 / 3
Регистрация: 12.03.2011
Сообщений: 39
02.01.2012, 22:07  [ТС] #3
спасибо, этот вариант я понимаю, но он меня не устраивает

хочу понять с использованием списков (если корректно выразился.. )
0
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/
0
rangerx
1935 / 1544 / 141
Регистрация: 31.05.2009
Сообщений: 2,913
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 помощью функций.
1
go
Эксперт С++
3586 / 1366 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
02.01.2012, 23:24 #6
rangerx, имелось ввиду действие со стандартным контейнером list
0
BUMER
157 / 12 / 0
Регистрация: 01.04.2009
Сообщений: 103
02.01.2012, 23:28 #7
go, в стандартном контейнере работа с указателями не требуется, а просили объяснить именно ее.
rangerx, в общем-то все правильно рассказал, но пример далеко не из простых. Если все понятно, то хорошо, если нет - Don't, дай знать.
0
Don't
9 / 9 / 3
Регистрация: 12.03.2011
Сообщений: 39
02.01.2012, 23:28  [ТС] #8
go,
неа, rangerx, описал вроде то что я хотел, сейчас буду разбираться
0
go
Эксперт С++
3586 / 1366 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
02.01.2012, 23:32 #9
BUMER, проще с итераторами

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

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

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

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

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

соответственно назревает вопрос какой метод является лучшим, заметно сразу, что 1й на много проще
0
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 (признак конца списка).
важно: в конце программы не забудь удалить динамически взятую память. процесс удаления похож на создание.
1
Don't
9 / 9 / 3
Регистрация: 12.03.2011
Сообщений: 39
03.01.2012, 00:10  [ТС] #13
спасибо всем
при повторном просмотре заметил, что и rangerx описан цикл с указателям..

но в итоге , есть ли недостатки у 1го способа перед вторым?
и предпочтительнее использовать его?
0
BUMER
157 / 12 / 0
Регистрация: 01.04.2009
Сообщений: 103
03.01.2012, 00:17 #14
Don't, используется обычно первый способ. но, как я писал, в обучающих целях, чтоб понимать, что вообще происходит, нужно сначала освоить второй.
1
go
Эксперт С++
3586 / 1366 / 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.
0
03.01.2012, 10:44
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.01.2012, 10:44
Привет! Вот еще темы с ответами:

Нужен пример класса - C++
Привести пример класса для работы с комплексными числами и содержащего перегруженную операцию для вычитания комплексных чисел.

Нужен пример цикла while - C++
Помогите решить задачку или хотябы обьясните как делать а то сижу и думаю как это так реализовать

Нужен пример хэширования - C++
Здравствуйте! Ни как не могу понять хэширование,если не трудно, то напишите какие нибудь простейшие примеры реализации. Заранее благодарю!

Нужен пример с массивами - C++
Не могу догнать, зачем нужен массив конкретно.


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru