Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/8: Рейтинг темы: голосов - 8, средняя оценка - 4.75
0 / 0 / 1
Регистрация: 19.12.2012
Сообщений: 108

Можно ли получить значение элемента кортежа полученного с помощью make_tuple

27.05.2017, 09:36. Показов 1714. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, есть массив
it = make_tuple(i, j, false);
Есть ли возможность получить третье значение (false) , зная лишь i и j
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
27.05.2017, 09:36
Ответы с готовыми решениями:

Получить нужное значение полученного массива при выводе из БД
Благодаря Вашим трудам в теме https://www.cyberforum.ru/php-database/thread639162.html я научился, используя mysqli, получать нужную мне...

Masm 32, как получить последнее значение записанное в стек с помощью esp, а не с помощью POP
Здравствуйте. В регистр esp вроде должен быть записан адрес последнего, что добавлено в стек. Я хочу извлечь значение из стека, по этому...

Получить индекс элемента одномерного массива, если известно значение элемента (без цикла)?
Получить индекс элемента одномерного массива, если известно значение элемента (без цикла)? То есть у меня есть заполненый массив. Есть...

5
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,427
27.05.2017, 16:59
Цитата Сообщение от Frodo4500 Посмотреть сообщение
есть массив
В смысле, кортеж?
Цитата Сообщение от Frodo4500 Посмотреть сообщение
сть ли возможность получить третье значение (false) , зная лишь i и j
Зачем для этого знать i и j?
C++
1
std::get<2>(it);
1
0 / 0 / 1
Регистрация: 19.12.2012
Сообщений: 108
27.05.2017, 18:27  [ТС]
Вот мой код, да, так получать можно. Но для определения, окружена точка вражескими окончательно или нет (для реализации логики A* или подобной, нужно пробегаться по всем клеткам). Просто других вариантов для узнавания, окружена точка или нет я не знаю ( не нашел ) (((
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
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
#include <SDL.h>
#include <SDL_image.h>
#include <SDL_mixer.h>
#include <string>
#include <iostream>
#include <array>
#include <map>
#include <vector>
#include <utility>
 
SDL_Window* window = NULL;
SDL_Surface *windowSurface = NULL;
SDL_Surface *imageSurface = NULL;
SDL_Renderer* renderer = NULL;
 
const int SCREEN_WIDTH = 640;
const int SCREEN_HEIGHT = 480;
 
using namespace std;
 
void chip(string wayimage, SDL_Rect MySrcR, SDL_Rect MySrcR2);
void close();
 
class Cell                                    // класс являющийся ячейкой
{
public:
    int MyX;                              // начало отрисовки. координаты по X
    int MyY;                              // начало отрисовки. координаты по Y
    int MyWidth;                       // ширина клетки
    int MyHeight;                      // высота клетки
    bool MyClick;                       // факт создания клетки
    bool MyFriend;                    // является ли клетка вражеской или нет
 
    Cell()
    {
        MyX = 0; MyY = 0; MyWidth = 0; MyHeight = 0; MyClick = false; MyFriend = false;
    }
    Cell(int x, int y, int nWidth, int nHeight, bool nClick, bool nFriend) : MyX(x), MyY(y), MyWidth(nWidth), MyHeight(nHeight), MyClick(nClick), MyFriend(nFriend)
    {
    };
    void show()                                                                                         // рисую клетку
    {
        SDL_Rect outlineRect = { MyX, MyY, 20 , 20 };                                  // по полученным координатам X и Y создается прямоугольник
        SDL_SetRenderDrawColor(renderer, 0x00, 0x00, 0x00, 0x00);           // заливка прямоугольника цветом
        SDL_RenderDrawRect(renderer, &outlineRect);                                   // сама отрисовка на рендере
    }
};
 
void chip(string wayimage, SDL_Rect MySrcR, SDL_Rect MySrcR2)         //для рисования точки
{
    SDL_Surface *myimage = SDL_LoadBMP(wayimage.c_str());               // загружаем картинку по полученному пути
    if (myimage == NULL)
    {
        cout << "Error of loading of the image" << endl;                               // выдаем ошибку если картинка не загрузилась
    }
    SDL_Texture *mytexture = SDL_CreateTextureFromSurface(renderer, myimage);  // создаем текстуру
    SDL_FreeSurface(myimage);
    SDL_RenderCopy(renderer, mytexture, NULL, &MySrcR);
    SDL_RenderPresent(renderer);                                                           // рисуем нашу точку
    SDL_BlitSurface(imageSurface, &MySrcR2, windowSurface, &MySrcR);
}
 
void close()                                                                                          // очищаем память от всего с чем работали
{
    SDL_FreeSurface(imageSurface);
    imageSurface = NULL;
    window = NULL;
    windowSurface = NULL;
    renderer = NULL;
    SDL_DestroyWindow(window);
    SDL_Quit();
}
 
int main(int argc, char* args[])
{
    SDL_Init(SDL_INIT_VIDEO);
    window = SDL_CreateWindow("sdl game", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, SCREEN_WIDTH, SCREEN_HEIGHT, SDL_WINDOW_SHOWN);           // создаем окно
    if (window == NULL)
    {
        cout << "Error of creation of a window" << endl;                     // в случае ошибки, выдаем сообщение и выходим из программы
        return 0;
    }
    renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED);        // создаем рендер
 
    SDL_SetRenderDrawColor(renderer, 0xFF, 0xFF, 0xFF, 0xFF);                                    // заливаем рендер цветом
    SDL_RenderClear(renderer);
 
    int step = 20;
 
    map<tuple<int, int, bool, bool>, Cell *> nMap;                                                      // создаем массив экземпляров класса Cell
 
    int MouseX;
    int MouseY;
 
    bool isRunning = true;
    SDL_Event e;
 
    while (isRunning)
    {
        while (SDL_PollEvent(&e) != 0)
        {
            if (e.type == SDL_QUIT)
                isRunning = false;
 
            switch (e.type)
            {
            case SDL_MOUSEMOTION:             // считываем и записываем координаты мыши
                MouseX = e.motion.x;
                MouseY = e.motion.y;
 
                if (e.button.button == 1 || e.button.button == 4)            // если  нажата левая или правая клавиша мыши, то
                {
                    int i = 20;
                    int j = 20;
                    for (i; i < (MouseX - 20);)                                              // в этом цикле, и том что ниже приводим координаты к нормальному виду, чтобы клетка рисовалась по 
                                                                                             //              x и y от начала координат с кратностью 20 (ширина и высота клетки) - в результате клетки не будут пересекаться друг с другом при отрисовке
                    {
                        i += 20;
                        //  cout << i << " " << endl;
                    }
                    for (j; j < (MouseY - 20);)
                    {
                        j += 20;
                        //  cout << j << " " << endl;
                    }
 
                    auto it = make_tuple(i, j, false, false);                      // кортеж или динамический массив - кому как удобней
                    nMap[it] = new Cell(i, j, 20, 20, false, false);            // создаю экземпляр класса по данным из кортежа
                                                                                //      cout << i << "  " << j << endl;                           // отладочная инфа, дабы быть уверенным, что овсе просчитано норм
                    cout << "" << endl;
 
                    for (auto it : nMap)
                    {
                        Cell * nCell = it.second;
                        SDL_Rect SrcR;                                  // создаю прямоугольник в котором будет рисоваться текстура
                        SrcR.x = nCell->MyX;
                        SrcR.y = nCell->MyY;
                        SrcR.w = 20;
                        SrcR.h = 20;
 
                        SDL_Rect SrcR2;                              // указания, тому прямоугольнику, что выше, откуда он будет рисоваться
                        SrcR2.x = MouseX;
                        SrcR2.y = MouseY;
 
                        if (nCell->MyClick == false)           // проверка, если клетка уже существует, то в этом месте мы рисовать не можем
                        {
                                windowSurface = SDL_GetWindowSurface(window);
                                if (e.button.button == 1)             // если нажата ЛКМ, то рисуем синию фишку
                                {
                                    nCell->MyClick = true;
                                    chip("data/image/btn_blue.bmp", SrcR, SrcR2);
                                }
                                else
                                {                                                  // иначе рисуем красную
                                    nCell->MyClick = true;
                                    nCell->MyFriend = true;
                                    chip("data/image/btn_red.bmp", SrcR, SrcR2);
                                }
 
                                if (nCell->MyClick == true)
                                {
                                    int MyX1 = SrcR.x;
                                    int MyY1 = SrcR.y;
 
                                    for (int k = (MyX1 - 20); k <= (MyX1 + 20); k += 20)
                                    {
                                        for (int j = (MyY1 - 20); j <= (MyY1 + 20); j += 20)
                                        {
                                            // здесь я могу получать координаты вокруг только что поставленной мной точки, для
                                            //       дальнейшей проверки , но не могу понять как получить экземпляр класса, зная лишь x и y, для того чтобы проверить, вражеская это клетка или нет.
                                            cout << k << "  " << j << endl;
 
                                        }
                                    }
                                }
 
                            nCell->show();
                        }
                    }
                }
            }
        }
        SDL_RenderPresent(renderer);
    }
    close();
 
    return 0;
}
0
 Аватар для dailydose
671 / 217 / 88
Регистрация: 21.07.2016
Сообщений: 1,036
Записей в блоге: 2
27.05.2017, 18:38
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
#include <cstdio>
#include <cstring>
#include <cctype>
#include <tuple>
 
int main(int argc, char *argv[])
{
    constexpr size_t i = 0, j = 0;
    auto it = std::make_tuple(i, j, false);
 
    bool result;
    std::tie(std::ignore, std::ignore, result) = it;
 
    std::cout << (int)result << std::endl;
 
    // [ANTIWARNING] unused parameters: 'argc', 'argv'
    return argc > 0 ? 0 : (int)*argv[0];
}
?
0
0 / 0 / 1
Регистрация: 19.12.2012
Сообщений: 108
27.05.2017, 18:53  [ТС]
А пояснишь шуть-шуть можно ?
А то я что то мальца запутался ((
0
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
27.05.2017, 21:54
Цитата Сообщение от dailydose Посмотреть сообщение
[ANTIWARNING] unused parameters: 'argc', 'argv'
Традиционно это делается приведением к void. Например, Qt-шный макрос Q_UNUSED внутри устроен именно так.
C++
1
2
(void)argc;
(void)argv;
Пишу, потому что насмотрелся в коде на всяческие извращения на эту тему.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
27.05.2017, 21:54
Помогаю со студенческими работами здесь

Выясните, можно ли из функции f(x,y,z) с помощью суперпозиций получить g(x,y,z)?
Решите задачи, пожалуйста... 1. Выясните, можно ли из функции f(x,y,z) с помощью суперпозиций получить g(x,y,z)? ...

С помощью какого элемента можно сделать что-то наподобие чека?
С помощью какого элемента можно сделать что-то наподобие чека? Чтобы выводилось окно, которое показывало бы данные текстбоксов.

С помощью какого элемента можно вывести на форму серилизованные данные
С помощью какого элемента можно вывести на форму серилизованные данные

С помощью какого компонента можно получить путь до каталога
Мне надо полуить путь а не файл, чем мне воспользоваться? для файла есть OpenFileDialog а что есть для получение пути? Добавлено через...

Получить значение из таблицы с помощью LINQ
Начал изучать это направление, хочу при его помощи сопоставлять значение дропдаун и UserID с таблицей v_Users и подтягивать поле...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru