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

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

Войти
Регистрация
Восстановить пароль
 
Kverza
0 / 0 / 0
Регистрация: 29.10.2015
Сообщений: 42
#1

В цикле пройти по полям структуры - C++

29.06.2016, 11:54. Просмотров 270. Ответов 11
Метки нет (Все метки)

Доброго времени суток! Имеется структура данных
C++
1
2
3
4
5
6
7
8
9
struct Rules
    {
    public:
        std::string left;
        std::string rule1;
        std::string rule2;
        std::string rule3;
        ...
     }
Вопрос следующий - можно ли в цикле при помощи указателей пройтись по полям этой структуры?

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

Структуры, массивы структур (как можно присваивать(инициализировать) значения полям структуры) - C++
Есть у меня вот такая структура, например struct Subject { int cost; int Volume; }; Потом создаю экземпляр, Subject G; ...

Сортировка по полям структуры - C++
Необходимо сортировать параграфы по возрастанию. Структура имеет вид: struct gloss { char term; bool flag; int nom; } ...

Не очевидное смещение к полям структуры - C++
Доброе время суток! Столкнулся с непонятным мне вопросом... у меня есть структура: struct A { uint16_t x; uint32_t y; }

Доступ к полям структуры по номерам - C++
Как можно присвоить полям структуры номера и организовать к ним доступ по этому номеру? Видел где-то идею сделать внутри структуры функцию,...

Получить доступ к полям структуры - C++
здравствуйте,если свести проблему к локальному контексту, то есть код примерно такой: struct zeus { template<typename...

Присвоить значения полям структуры - C++
Фрагмент программы. не могу присвоить значения полям структуры.почему??? ошибка Lvalue required class laba { int...

11
shilko2013
244 / 221 / 118
Регистрация: 02.04.2016
Сообщений: 850
Завершенные тесты: 1
29.06.2016, 12:10 #2
В структуре писать public не надо и пройтись циклом нельзя, так как у разных компиляторов расположение полей может быть разное. Почитайте про выравнивание данных...
0
meJevin
155 / 147 / 58
Регистрация: 18.11.2015
Сообщений: 668
Завершенные тесты: 1
29.06.2016, 12:33 #3
Kverza, что ты имеешь ввиду при помощи указателей пройтись по полям этой структуры?? Ты хочешь создать указатель на объект этой структуры и при помощи него в цикле получать доступ к каждому полю? И еще, ты пишешь три точки, это намек на то, что кол-во rule'ов неизвестно? В таком случае что-то типа std::vector<std::string> rules может помочь. Но я все равно не понимаю твоего вопроса из-за отсутствия контекста. Что ты будешь делать и как устроена структура, скажи пожалуйста.
0
Kverza
0 / 0 / 0
Регистрация: 29.10.2015
Сообщений: 42
29.06.2016, 12:43  [ТС] #4
Ну, начнем по порядку)

1. да, хочу создать указатель на структуру, с целью обращаться к каждому из rule отдельно. Хотелось, как вариант, получить адрес первого, а потом смещениями добраться до второго, и т.д.

2. Нет, три точки значат, что их 6 штук строго, просто немного лень было писать) Позже я делаю
C++
1
std::vector<Rules*>
0
notAll
419 / 140 / 31
Регистрация: 27.05.2016
Сообщений: 365
Завершенные тесты: 2
29.06.2016, 12:45 #5
Есть такой вариант на бусте:
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
#include <boost/fusion/include/adapt_struct.hpp>
#include <boost/fusion/algorithm.hpp>
 
struct Rules
{
    std::string left = "left";
    std::string rule1 = "rule1";
    std::string rule2 = "rule2";
    std::string rule3 = "rule3";
};
 
BOOST_FUSION_ADAPT_STRUCT(
    Rules,
    (BOOST_FUSION_ADAPT_AUTO, left),
    (BOOST_FUSION_ADAPT_AUTO, rule1),
    (BOOST_FUSION_ADAPT_AUTO, rule2),
    (BOOST_FUSION_ADAPT_AUTO, rule3)
    )
 
struct value_printer
{
    template <typename U>
    void operator()(const U& x) const
    {
        std::cout << x << '\n';
    }
};
 
int main()
{
    Rules rls;
    boost::fusion::for_each(rls, value_printer());
}
online
0
Kverza
0 / 0 / 0
Регистрация: 29.10.2015
Сообщений: 42
29.06.2016, 13:03  [ТС] #6
notAll, Буст это круто, но я его не использую. То что Вы предложили является абсолютно верным, но надо без буст
0
shilko2013
244 / 221 / 118
Регистрация: 02.04.2016
Сообщений: 850
Завершенные тесты: 1
29.06.2016, 13:09 #7
Я бы не рисковал, другой процессор по другому расставит машинные слова и получится бурда.
0
Kverza
0 / 0 / 0
Регистрация: 29.10.2015
Сообщений: 42
29.06.2016, 13:23  [ТС] #8
shilko2013, а чисто с технической стороны такого можно добиться?
0
avgoor
915 / 550 / 119
Регистрация: 05.12.2015
Сообщений: 1,531
29.06.2016, 13:28 #9
Цитата Сообщение от Kverza Посмотреть сообщение
а чисто с технической стороны такого можно добиться
Зачем?
Вот это
Цитата Сообщение от Kverza Посмотреть сообщение
C++
1
2
3
std::string rule1;
std::string rule2;
std::string rule3;
Называется "китайский код".

Что вам мешает сделать так:

C++
1
2
3
4
5
6
7
struct Rules
    {
    public:
        std::string left;
        std::string rule[3];
        ...
     }
0
DrOffset
7351 / 4451 / 1009
Регистрация: 30.01.2014
Сообщений: 7,292
29.06.2016, 13:29 #10
Kverza, почему вот так не сделать?
C++
1
2
3
4
struct Rules
{
    std::string rules[6];
};
0
shilko2013
244 / 221 / 118
Регистрация: 02.04.2016
Сообщений: 850
Завершенные тесты: 1
29.06.2016, 13:30 #11
Kverza, Да, при условии что процессоры и машины будут одинаковые(на которых программу будешь запускать).
На одном процессоре получится, на другом нет).
C++
1
2
3
4
5
6
7
8
9
10
    struct S {
        int a = 1, b = 2;
    };
    S t;
    int * p = &t.a;
    p++;
    if (*p == t.b)
        cout << "Получилось!";
    else
        cout << "Неудача";
0
Kverza
0 / 0 / 0
Регистрация: 29.10.2015
Сообщений: 42
29.06.2016, 13:33  [ТС] #12
avgoor, Ничего не мешает, идея массива в голову как то не пришла...

Добавлено через 1 минуту
DrOffset, да, это правильно. Не могу сказать почему сразу так не сделал
0
29.06.2016, 13:33
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.06.2016, 13:33
Привет! Вот еще темы с ответами:

Ошибка при доступе к полям структуры - C++
error C4430: missing type specifier - int assumed. Note: C++ does not support default-int error C2679: binary '=' : no operator found...

Как присвоить полям структуры значение? - C++
Добрый день! У меня есть некая структура, как присвоить ей значение и передать в функцию. Если не трудно, можно на примере: { char...

Sort vector, сортировка по двум полям структуры - C++
Поскажите как отсортировать если: struct DATA{ string fir; string sec; double sm; }; vector &lt;DATA&gt; vec; vector...

Присвоить значение полям динамического массива структуры - C++
Здравствуйте, у меня возник такой вопрос: А как можно присвоить значение полям динамиского масива структуры... у меня не получилось,...


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

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

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