Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.91/34: Рейтинг темы: голосов - 34, средняя оценка - 4.91
 Аватар для Mesteriis
599 / 237 / 69
Регистрация: 08.08.2015
Сообщений: 1,637

Обращение к элементу структуры (вектора) без явного указание онного

14.01.2020, 18:29. Показов 6820. Ответов 18
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток.

Вопрос прям подмывает.
есть структура

C++ (Qt)
1
2
3
4
struct xx{
int yy;
int ww;
}
есть вектор
C++ (Qt)
1
vector<xx> arrXx;
могли я обращяться к ряду вектора и его элементам без явного указание точишь не arrXx[0].yy а допустим в цикле перебрать все элементы ряда без указание наименования элементов?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
14.01.2020, 18:29
Ответы с готовыми решениями:

Что быстрее? Обращение к элементу массива или к элементу структуры?
Обращение к элементу массива или к элементу структуры? Экспериментирую с кодом и получается примерно одинаково. Что интересно, время на...

STL . Обращение к 12 элементу вектора
Добрый вечер, форумчане! Столкнулся вот с такой проблемой. Имеется вектор, заполненный числами, огромной длины. Но почему-то не хочет...

Обращение к последнему элементу вектора
Здравствуйте, мне нужно сравнить последний элемент вектора с числом и в зависимости от того, какое это число, выполнить дальнейшие...

18
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
14.01.2020, 18:36
Цитата Сообщение от Mesteriis Посмотреть сообщение
могли я обращяться к ряду вектора и его элементам без явного указание точишь не arrXx[0].yy а допустим в цикле перебрать все элементы ряда без указание наименования элементов?
Mesteriis, можно использовать итераторы. Например, при передаче в функцию придётся передавать пару (интервал).
Можно даже работать с контейнерами итераторов на другие контейнеры. У меня в блоге есть считалка 1-2-3-4-5.
Но это если есть много времени и желания. Моё изобретение и нестандартный приём.
Вообще, итераторы непривычная штука для человека из племени Си(у-у-у). Они похожи на указатели но квалификаторы тут внедрены на уровне типа, например. Начинающие всегда имеют удивляться)
1
 Аватар для Mesteriis
599 / 237 / 69
Регистрация: 08.08.2015
Сообщений: 1,637
14.01.2020, 18:39  [ТС]
Цитата Сообщение от IGPIGP Посмотреть сообщение
У меня в блоге есть считалка 1-2-3-4-5
Мерси, сейчас ознакомлюсь с этим.

Не по теме:

PS я знаю что такое итераторы))) просто не когда не встречал их со структурами данных

0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
14.01.2020, 18:47
Цитата Сообщение от Mesteriis Посмотреть сообщение
PS я знаю что такое итераторы))) просто не когда не встречал их со структурами данных
Они ассоциируются с контейнерами элементов типа <WhoKnowsWhat>
Вообще предполагалось, что итераторы не знают про двух остальных участников треугольника - контейнеров и алгоритмов. Но вышло как всегда. Создать инициализированный итератор без ссылки на контейнер не получится. Например:
C++
1
2
3
4
vector<int> vi{1,2,3};
vector<int>::iterator beg=vi.begin(), en=vi.end();//можно auto использовать)
for(;beg !=en; ++beg) cout<<*beg<<' '; //1 2 3
//для типа структуры нужно было бы cout<<(beg->m_intField)<<' ';//скобки на всякий (может и не обязательно)
Есть риск потери валидности, при вставке/удалении в цикле, например. Нужно осторожно. Как и с любыми адресными обращениями)
0
 Аватар для Mesteriis
599 / 237 / 69
Регистрация: 08.08.2015
Сообщений: 1,637
14.01.2020, 18:54  [ТС]
IGPIGP, не я малец не про это. Суть моего вопроса что бы не указывать все элементы ряда
C++ (Qt)
1
2
3
arrXx[0].yy
arrXx[0].ww
// и т д
видь структура может быть и на 15 элементов. А в Нутри ряда 0 перебрать все элементы (yy, ww и т д)
0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
14.01.2020, 18:59
Цитата Сообщение от Mesteriis Посмотреть сообщение
IGPIGP, не я малец не про это. Суть моего вопроса что бы не указывать все элементы ряда
не понял.
Массивы и векторы поддерживают адресную арифметику. В частности можно обратиться к трём элементам из десяти вот так:
C++
1
2
3
arrXx[0].yy;
arrXx[5].yy;
arrXx[9].yy;
Предполагается что в структуре лежащей в контейнере есть элемент yy.
Но уточни. А то я не вник.
0
 Аватар для Mesteriis
599 / 237 / 69
Регистрация: 08.08.2015
Сообщений: 1,637
14.01.2020, 19:05  [ТС]
Так. Ряд вектора arrXx[100]
Элемента ряда это arrXx[100].yy

Мой вопрос про перебор элементов без явного указания его имени. в данном примере yy. Например

C++ (Qt)
1
2
3
for (auto i = ??; i<??; i++){
cout << arrXx[100].??;
}
Добавлено через 1 минуту
То есть не перебирать элементы структуры без явного указания имени элемента
0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
14.01.2020, 19:08
Mesteriis, вообще, человек решивший назвать контейнерный тип (контейнеровоз - морским языком - я с Одессы) контейнером, - типичный математик. Моря он не видел. Из жидкостей - кофе, пиво и то что в голову ударило, когда название придумывал. Контейнер по сути это ячейка контейнерного типа. То есть он (контейнерный тип) contains (содержит) контейнеры. А в контейнерах лежат объекты. Если бы так и назвали во 100 раз было бы легче писать про нюансы аллокации. Хоть для оптимистов, хоть для нормальных людей. Ну то есть контьенеровоз наполовину полон. Или пуст. По желанию. В общем почитай.

Добавлено через 3 минуты
Цитата Сообщение от Mesteriis Посмотреть сообщение
Элемента ряда это arrXx[100].yy
Покажи структуру (ёе объявление) которая в векторе (vector<??> arrXx; // объява) для уверенности. Но может ты хочешь:
C++
1
2
for (size_t i = 0; i<99; ++i){
cout << arrXx[i].yy;
угадал?
0
 Аватар для Mesteriis
599 / 237 / 69
Регистрация: 08.08.2015
Сообщений: 1,637
14.01.2020, 19:13  [ТС]
Да блин, я знаю как перебрать вектор)))
Нет я именно хочу перебрать элементы структуры. 100м элементе вектора
C++ (Qt)
1
2
3
for (auto i = ??; i<??; i++){
cout << arrXx[100].??;
}
Добавлено через 1 минуту
Цитата Сообщение от IGPIGP Посмотреть сообщение
Покажи структуру в векторе (vector<??> arrXx) для уверенности.
C++ (Qt)
1
2
3
4
5
6
struct xx{
int yy;
int ww;
}
есть вектор 
vector<xx> arrXx;
0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
14.01.2020, 19:14
Цитата Сообщение от Mesteriis Посмотреть сообщение
Мой вопрос про перебор элементов без явного указания его имени. в данном примере yy.
В общем случае, если yy имя поля структуры, то без него трудновато. Разве только оператор приведения для структуры наваять. Привести к ссылке на поле можно даже. Публичной. Но это суицид.
Ну вот. Увидев твою структурку я успокоился. См. предыдущий текст (выше).
А иначе - по имени. Иначе как компилятор догадается yy или ww ты хочешь?
1
 Аватар для Mesteriis
599 / 237 / 69
Регистрация: 08.08.2015
Сообщений: 1,637
14.01.2020, 19:16  [ТС]
Хм. просто печально когда хочется вывести весь вектор со всеми полями, а их 20-30 )
0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
14.01.2020, 19:26
Цитата Сообщение от Mesteriis Посмотреть сообщение
Хм. просто печально когда хочется вывести весь вектор со всеми полями, а их 20-30 )
Дык имя то везде одно - yy. И строчка будет одна. Или опять я тебя не пойму?
Если только о выводе речь - перегрузи оператор вывода в поток <<. Но лучше бы так не делать. Этот оператор - тулза всей структурки. По нему лучше всё выкладывать по порядку: yy ww (и пр. если есть ещё). Ему всё едино в какой поток писать.

Добавлено через 2 минуты
Цитата Сообщение от Mesteriis Посмотреть сообщение
со всеми полями,
может последняя мысль - та что приходит опосля.
0
 Аватар для Mesteriis
599 / 237 / 69
Регистрация: 08.08.2015
Сообщений: 1,637
14.01.2020, 19:29  [ТС]
Цитата Сообщение от IGPIGP Посмотреть сообщение
Дык имя то везде одно - yy.


Да в том то и что нет)))
Давай по другому спрошу
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
 struct xx
    {
        int x1;
        int x2;
        int x3;
        int x4;
        int x5;
        ...
        int x100;
    };
    
    
    vector <xx> arrXX;
    
    cout << arr[100].x1 << " - "
                           << arr[100].x1 << " - "
                              << arr[100].x2 << " - "
                                 << arr[100].x3 << " - "
                                       ...
                                       << arr[100].x100 << " - "; /// вот что бы не занимается таким говном
0
495 / 209 / 70
Регистрация: 27.05.2016
Сообщений: 557
14.01.2020, 19:32
C++
1
2
3
struct xx {
std::vector<int> _xs;
}
0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
14.01.2020, 19:32
Лучший ответ Сообщение было отмечено Mesteriis как решение

Решение

Цитата Сообщение от Mesteriis Посмотреть сообщение
Да в том то и что нет)))
Давай по другому спрошу
От если бы ты начал с этого кода - сразу бы получил ответ. Перегрузи оператор << или напиши функцию метод а ля printItAll().
Вектор не при чём. Это в структуре надо делать.
1
 Аватар для zayats80888
6352 / 3523 / 1428
Регистрация: 07.02.2019
Сообщений: 8,995
14.01.2020, 19:32
Лучший ответ Сообщение было отмечено Mesteriis как решение

Решение

Mesteriis, определи итератор для своей структуры, напиши пару методов begin() и end(), а дальше
C++
1
for (auto val : arr[100]) cout << val << " - ";
1
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
14.01.2020, 19:46
Лучший ответ Сообщение было отмечено Mesteriis как решение

Решение

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
#include <iostream>
#include <string>
#include <vector>
using namespace std;
struct myStruct
{
    int x=1;
    string str="Pi=";
    double pi=3.14;
    friend ostream& operator<<(ostream& os, const myStruct& mS);
};
ostream& operator<<(ostream& os, const myStruct& mS)
{
    return
    os  <<mS.x<<' '
        <<mS.str<<' '
        <<mS.pi;
 
}
int main()
{
vector<myStruct> vms(10);
for(const auto& el:vms)cout<<el<<'\n';
return 0;
}
0
 Аватар для Mesteriis
599 / 237 / 69
Регистрация: 08.08.2015
Сообщений: 1,637
14.01.2020, 19:54  [ТС]
IGPIGP, Мерси,
Цитата Сообщение от IGPIGP Посмотреть сообщение
{
    return
    os  <<mS.x<<' '
        <<mS.str<<' '
        <<mS.pi;
}
просто думал что есть какое то алгоритм для такого. Ну что же ладно, действительно один раз метод написал (перезагрузил) оператор и пользуещься
1
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
14.01.2020, 19:57
Цитата Сообщение от Mesteriis Посмотреть сообщение
просто думал что есть какое то алгоритм для такого
Есть. Можно отдать итератор потока на этот вектор в алгоритм copy. Но по-моему и так хорошо)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
14.01.2020, 19:57
Помогаю со студенческими работами здесь

Обращение к конкретному элементу двумерного вектора
Здравствуйте. Делаю лабу и не могу разобраться в некоторых вопросах. Нужно обратиться к конкретному элементу вектора, находящегося в...

Скачивание файлов, без явного указание каких
Доброго времени суток! У меня возникла проблема - мне надо написать функцию, которая будет скачивать все файлы с сайта, но проблема в их...

Обращение к элементу структуры
В strncpy и printf нужно прописать путь к элементам структуры через указатели(-&gt;). Можете помочь пожалуйста, а то что-то тут у меня н...

Обращение к элементу структуры в коллекции
Здравствуйте, объясните пожалуйста каким образом я могу обратиться к элементу структуры находящемуся в коллекции? Допустим мне нужно...

Обращение к элементу структуры по имени (char *)
Здравствуйте. Пишу на чистом Си, потребовалось использование конфигурационного файла, решил сделать файл следующей структуры: ...


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

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
Новые блоги и статьи
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут Суть: - Группа наркоманов из 10 человек. - Только один инфицирован ВИЧ. - Колются одной иглой. - Колются раз в день. - Колются последовательно через. . .
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru