Форум программистов, компьютерный форум, киберфорум
SFML
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.96/25: Рейтинг темы: голосов - 25, средняя оценка - 4.96
J5
25 / 25 / 9
Регистрация: 22.12.2013
Сообщений: 107

Оформление списка (вектора) объектов, содержащих текстуры и спрайты

04.03.2020, 22:57. Показов 4729. Ответов 19

Студворк — интернет-сервис помощи студентам
Имеется класс, в котором, помимо полей с данными, имеются текстура и спрайт.
C++
1
2
3
4
5
6
7
8
9
class Shell{//Класс выпущенного снаряда
public:
    float width, height, difference_x, difference_y;//Переменные выпущенного снаряда отвечающие за текущую позицию, тангенс угла выстрела, ширину и высоту картинки снаряда и разницу между положением стрелка и целью
    sf::Texture picture_t;
    sf::Sprite picture_s;
    Shell();
    Shell(float start_x, float start_y, float destination_x, float destination_y, int chosen_speed);
    virtual void behavior();//Виртуальная функция поведения выпущенного снаряда
};
При создании вектора подобных объектов
C++
1
2
std::vector <Shell> player_shells;//Содержатель возможных снарядов
player_shells.push_back(Shell(position_x - 60, position_y + 65, window.mapPixelToCoords(sf::Mouse::getPosition(window)).x - 25, window.mapPixelToCoords(sf::Mouse::getPosition(window)).y, 2 * attack_speed, "things/0.png"));//Содержатель возможных снарядов пополняется динамическим припасом
и последующем связывании текстуры со спрайтом добавленного, последнего объекта через внешнюю функцию,
C++
1
2
player_shells[player_shells.size() - 1].picture_t.loadFromFile("0.png");
player_shells[player_shells.size() - 1].picture_s.setTexture(player_shells[player_shells.size() - 1].picture_t);
происходит забавный эффект: при прорисовке текстура некоторое время отображается, но потом снова становится белой, т. е., фактически, теряется связь между спрайтом добавленного объекта с текстурой этого же объекта, даже не смотря на внешнее связывание. Почему так происходит? Неужели вектор теряет адрес текстуры?
К слову, снаряд удаляется из вектора, как только выходит за пределы видимой области.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
04.03.2020, 22:57
Ответы с готовыми решениями:

SFML. Не загружаются текстуры и спрайты
Ошибка возникает когда создаю переменные сипа Sprite и Texture... вот часть кода class Turel: public Object { public: ...

Элементы списка (спрайты) неверно отображаются на экране
Я хотел написать программу, используя библиотеку SFML, в которой необходимо использовать список объектов класса, через которые можно...

Некоторые текстуры и полигоны объектов в игре не прорисовываются
Когда в игры играю то там прозрачные дырки в графике, и в некоторых местах линии графики размазанные, длинные и уходят в разные стороны....

19
 Аватар для zayats80888
6344 / 3515 / 1428
Регистрация: 07.02.2019
Сообщений: 8,981
05.03.2020, 07:41
Цитата Сообщение от J5 Посмотреть сообщение
Почему так происходит? Неужели вектор теряет адрес текстуры?
Происходит так потому, что спрайт хранит ссылку на текстуру, а вектор при добавлении реаллоцирует свои данные. НЕ НУЖНО перемещать ресурсы, на которые ссылаются объекты, не владея ими!
Более того текстура - тяжелый ресурс, по этому создавать, загружать из файла, загружать в видюху, копировать туда сюда при каждом чихе - дикость.
Один раз создай и загрузи текстуру, храни её в одном месте, и передавай её хоть 100500 разным спрайтам как setTexture по ссылке.
0
J5
25 / 25 / 9
Регистрация: 22.12.2013
Сообщений: 107
05.03.2020, 12:19  [ТС]
Цитата Сообщение от zayats80888 Посмотреть сообщение
а вектор при добавлении реаллоцирует свои данные
Т. е. меняет положение (адрес) в памяти?
Цитата Сообщение от zayats80888 Посмотреть сообщение
НЕ НУЖНО перемещать ресурсы, на которые ссылаются объекты, не владея ими!
Почему же не владея? Если вектор сам меняет адрес в памяти ресурсов, то это проблема стандарта.
Цитата Сообщение от zayats80888 Посмотреть сообщение
Более того текстура - тяжелый ресурс, по этому создавать, загружать из файла, загружать в видюху, копировать туда сюда при каждом чихе - дикость.
Ну, в случае боеприпасов с размером 15 на 15 квадратов вполне нормально. Другой вопрос в том, что изменение положения их в случае вылета за пределы экрана тоже затратное занятие. И ещё момент, число припасов вылетающих за единицу времени может изменяться. Уже не подходит ваш вариант.
Цитата Сообщение от zayats80888 Посмотреть сообщение
Один раз создай и загрузи текстуру, храни её в одном месте, и передавай её хоть 100500 разным спрайтам как setTexture по ссылке.
Это если один спрайт будет использоваться в рамках условного сеанса. В случае, когда число спрайтов "безгранично", то без динамического выделения памяти не обойтись. "Нет серебряной пули".
0
 Аватар для zayats80888
6344 / 3515 / 1428
Регистрация: 07.02.2019
Сообщений: 8,981
05.03.2020, 12:50
Цитата Сообщение от J5 Посмотреть сообщение
Т. е. меняет положение (адрес) в памяти?
Да, только не вектор, а массив его элементов.
Цитата Сообщение от J5 Посмотреть сообщение
Почему же не владея?
потому что
Цитата Сообщение от zayats80888 Посмотреть сообщение
спрайт хранит ссылку на текстуру
Цитата Сообщение от J5 Посмотреть сообщение
Если вектор сам меняет адрес в памяти ресурсов, то это проблема стандарта.
Нет, это проблема программиста
Цитата Сообщение от J5 Посмотреть сообщение
Ну, в случае боеприпасов с размером 15 на 15 квадратов вполне нормально.
Ты не понял, это НЕ нормально и НЕ нужно.
Цитата Сообщение от J5 Посмотреть сообщение
И ещё момент, число припасов вылетающих за единицу времени может изменяться. Уже не подходит ваш вариант.
Какой вариант? Я пока ничего не предлагал.
Цитата Сообщение от J5 Посмотреть сообщение
Это если один спрайт будет использоваться в рамках условного сеанса. В случае, когда число спрайтов "безгранично", то без динамического выделения памяти не обойтись. "Нет серебряной пули".
Во первых количество спрайтов никак не влияет на количество текстур.
Во вторых можно (и нужно) обойтись только разовой аллокацией, потому что вам НЕ нужно "безграничное" число спрайтов, т.к. экран не резиновый и нет необходимости поддерживать "жизнь" "пуль", которые вылетели за границы или "попали" куда то.
Решение - пул объектов + вектор указателей на объекты.
0
J5
25 / 25 / 9
Регистрация: 22.12.2013
Сообщений: 107
05.03.2020, 13:11  [ТС]
Цитата Сообщение от zayats80888 Посмотреть сообщение
Нет, это проблема программиста
Нет. Это проблема стандарта.С чего бы менять адрес элементов, которые в связанном списке? В чём целесообразность, если они ещё используются?
Цитата Сообщение от zayats80888 Посмотреть сообщение
Ты не понял, это НЕ нормально и НЕ нужно.
Ты не понял. Это нормально, удобно и имеет смысл.
Цитата Сообщение от zayats80888 Посмотреть сообщение
Какой вариант? Я пока ничего не предлагал.
Цитата Сообщение от zayats80888 Посмотреть сообщение
Один раз создай и загрузи текстуру, храни её в одном месте, и передавай её хоть 100500 разным спрайтам как setTexture по ссылке.
Тут комментарий излишен.
Цитата Сообщение от zayats80888 Посмотреть сообщение
Во первых количество спрайтов никак не влияет на количество текстур.
Это так, но одна текстура может быть использована лишь одним спрайтом. Начинаются проблемы при прорисовке всех необходимых спрайтов с текстурами в нужный момент.
Цитата Сообщение от zayats80888 Посмотреть сообщение
Решение - пул объектов + вектор указателей на объекты.
Так и сделано уже. Благодарю.
Кликните здесь для просмотра всего текста
Цитата Сообщение от zayats80888 Посмотреть сообщение
пул
Бассейн что ли?
0
 Аватар для zayats80888
6344 / 3515 / 1428
Регистрация: 07.02.2019
Сообщений: 8,981
05.03.2020, 14:19
Цитата Сообщение от J5 Посмотреть сообщение
С чего бы менять адрес элементов, которые в связанном списке?
с каких пор вектор стал списком?
Цитата Сообщение от J5 Посмотреть сообщение
Это так, но одна текстура может быть использована лишь одним спрайтом.
???
Цитата Сообщение от J5 Посмотреть сообщение
Начинаются проблемы при прорисовке всех необходимых спрайтов с текстурами в нужный момент.
Ну значит ручки виноваты...
Цитата Сообщение от J5 Посмотреть сообщение
Так и сделано уже. Благодарю.
Не похоже, вот примитивный пример (замени RectangleShape и Circle на спрайт и рисуй:
Кликните здесь для просмотра всего текста
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
struct Bullet
{
    static constexpr float speed = 200.0f;
 
    sf::Vector2f m_pos;
    sf::Vector2f m_dir;
    float life_time = 3.0f;
 
    Bullet() {}
    Bullet(sf::Vector2f pos, sf::Vector2f dir) : m_pos(pos), m_dir(dir) {}
 
    void update(float dt)
    {
        m_pos += m_dir * dt * speed;
        life_time -= dt;
    }
};
 
struct Pull
{
    static Pull& instance()
    {
        static std::unique_ptr<Pull> singl{ new Pull{} };
        return *singl;
    }
 
    Bullet* create(sf::Vector2f pos, sf::Vector2f dir)
    {
        Bullet* result = nullptr;
        if (!allowed.empty())
        {
            result = allowed.back();
            allowed.pop_back();
            *result = Bullet(pos, dir);
        }
        return result;
    }
 
    void destroy(Bullet* bull)
    {
        allowed.push_back(bull);
    }
 
private:
    Pull()
    {
        allowed.reserve(m_size);
        for (auto& bull : m_data)
        {
            allowed.push_back(&bull);
        }
    }
    Pull(const Pull&);
    Pull& operator=(const Pull&);
 
    static constexpr size_t m_size = 512;
    std::vector<Bullet> m_data{ m_size };
    std::vector<Bullet*> allowed;
};
 
struct Player : sf::Drawable, sf::Transformable
{
    Player(sf::Vector2f pos)
        :
        me(sf::Vector2f(20, 50)),
        bullet_sprite(10, 10)
    {
        me.setOrigin(10, 50);
        bullet_sprite.setOrigin(5, 5);
        setPosition(pos);
        bullet_sprite.setFillColor(sf::Color::Red);
    }
 
    void update(float dt)
    {
        for (size_t i{}; i < m_bullets.size();)
        {
            if (m_bullets[i]->life_time < 0)
            {
                std::swap(m_bullets[i], m_bullets.back());
                Pull::instance().destroy(m_bullets.back());
                m_bullets.pop_back();
            }
            else
            {
                m_bullets[i]->update(dt);
                ++i;
            }
        }
    }
 
    void shoot(sf::Vector2f target)
    {
        const auto pos = getPosition();
        target -= pos;
        target /= std::hypot(target.x, target.y);
        auto bull = Pull::instance().create(pos, target);
        if (bull) m_bullets.push_back(bull);
    }
 
private:
    sf::RectangleShape me;
    sf::CircleShape bullet_sprite;
    std::vector<Bullet*> m_bullets;
 
    void draw(sf::RenderTarget& target, sf::RenderStates states) const override
    {
        auto st = states;
        for (auto bull : m_bullets)
        {
            st.transform = states.transform;
            st.transform.translate(bull->m_pos);
            target.draw(bullet_sprite, st);
        }
        states.transform *= getTransform();
        target.draw(me, states);
        
    }
};
 
int main()
{
    
    sf::RenderWindow window(sf::VideoMode(800, 600), "test");
    window.setVerticalSyncEnabled(true);
 
    Player p(sf::Vector2f(400, 300));
    sf::Clock timer;
    while (window.isOpen())
    {
        sf::Event event;
        while (window.pollEvent(event))
        {
            if (event.type == sf::Event::Closed)
                window.close();
        }
 
        p.update(timer.restart().asSeconds());
        auto mouse = window.mapPixelToCoords(sf::Mouse::getPosition(window));
        auto look = mouse - p.getPosition();
        const float angle = std::atan2f(look.x, look.y);
        p.setRotation(angle * -180 / 3.1416f);
        if (sf::Mouse::isButtonPressed(sf::Mouse::Left))
            p.shoot(mouse);
 
        window.clear();
        window.draw(p);
        window.display();
    }
 
    return 0;
}

1
J5
25 / 25 / 9
Регистрация: 22.12.2013
Сообщений: 107
05.03.2020, 20:18  [ТС]
Цитата Сообщение от zayats80888 Посмотреть сообщение
с каких пор вектор стал списком?
Со времён возможности обращения через нумерацию (перечень)? Или у вас списком может называться только обозначенный СПИСОК в учебнике в рамках контекста? К слову, внутренняя реализация это подчёркивает. Или вы не знали?
https://ru.wikipedia.org/wiki/... 0%BE%D0%BA
Цитата Сообщение от zayats80888 Посмотреть сообщение
???
Цитата Сообщение от zayats80888 Посмотреть сообщение
Ну значит ручки виноваты
Или предложенная идея неподходящая...
Цитата Сообщение от zayats80888 Посмотреть сообщение
Не похоже, вот примитивный пример
Спасибо. Мне достаточно выделять память под указатели вектора напрямую и освобождать их при необходимости. Другой вопрос, какова цена абстракции, которую воспроизводят в pool-e, по сравнению с прямой динамикой? Вопрос риторический.
0
Неэпический
 Аватар для Croessmah
18128 / 10712 / 2064
Регистрация: 27.09.2012
Сообщений: 27,002
Записей в блоге: 1
05.03.2020, 21:20
J5, тебя не беспокоит забивание памяти одинаковыми текстурами, но беспокоят лишние аллокации памяти? Сделай пул объектов и бери свои пули оттуда в чем проблема?
1
J5
25 / 25 / 9
Регистрация: 22.12.2013
Сообщений: 107
05.03.2020, 23:03  [ТС]
Цитата Сообщение от Croessmah Посмотреть сообщение
J5, тебя не беспокоит забивание памяти одинаковыми текстурами, но беспокоят лишние аллокации памяти?
Что такое "аллокация"? Распределение памяти?
Цитата Сообщение от Croessmah Посмотреть сообщение
Сделай пул объектов и бери свои пули оттуда в чем проблема?
Да я и не против. Просто хотел готовыми средствами выполнить через вектор, а тут по стандарту адресация меняется без должного на то смысла. Странно.
0
Неэпический
 Аватар для Croessmah
18128 / 10712 / 2064
Регистрация: 27.09.2012
Сообщений: 27,002
Записей в блоге: 1
05.03.2020, 23:43
Что значит без смысла? Что такое вектор?
0
J5
25 / 25 / 9
Регистрация: 22.12.2013
Сообщений: 107
05.03.2020, 23:52  [ТС]
Цитата Сообщение от Croessmah Посмотреть сообщение
Что значит без смысла? Что такое вектор?
Динамический массив? Абстрактная форма управления памятью? Модель обобщённого представления? Динамический список?

Добавлено через 5 минут
Цитата Сообщение от Croessmah Посмотреть сообщение
Что значит без смысла?
Я выделил память в рамках "чистого" вектора, заполнил его через стандартные конструкторы вставками в конец. После этого я сразу же связываю поле текстуры добавленного объекта с спрайтом этого же объекта. Так почему же затем адресация данных полей меняется, ведь я не удалял данный объект далее.
0
Неэпический
 Аватар для Croessmah
18128 / 10712 / 2064
Регистрация: 27.09.2012
Сообщений: 27,002
Записей в блоге: 1
06.03.2020, 00:01
Лучший ответ Сообщение было отмечено J5 как решение

Решение

Вектор это не список, а массив - непрерывный кусок памяти. И когда вставляется новый элемент, а этот кусок закончился, то выделяется новый, больший по размеру кусок, и в него переносятся данные. Старый кусмян удаляется. Можете реализовать подобное без перевыделения? Если хотите, можете сделать резерв памяти для вектора, чтобы точно места хватило, но если вдруг не хватит, то будет перераспределение. Если можете обеспечить гарантию отсутствия перераспределения памяти, то можно и в векторе хранить.

Добавлено через 3 минуты
player_shells[player_shells.size() - 1] для доступа к последнему элементу можно использовать player_shells.back()

Но всё равно не надо одну и ту же текстуру по сто раз загружать.
2
J5
25 / 25 / 9
Регистрация: 22.12.2013
Сообщений: 107
06.03.2020, 00:11  [ТС]
Цитата Сообщение от Croessmah Посмотреть сообщение
Вектор это не список
Тут уже от трактовки слова зависит. Элементы ведь имеют порядок следования. Вы пишете что он непрерывный, но отдельные элементы в нём выделяются. Но это так, претензия к информационному языку в общем.
Цитата Сообщение от Croessmah Посмотреть сообщение
Можете реализовать подобное без перевыделения?
Некорректный вопрос. Если так его сконструировали, то так он и работает. Не знал что полностью подчищают при удалении хоть одного элемента. Или забыл?
Цитата Сообщение от Croessmah Посмотреть сообщение
Если хотите, можете сделать резерв памяти для вектора, чтобы точно места хватило, но если вдруг не хватит, то будет перераспределение.
Да уже нет смысла. Напрямую организую выделение памяти под указатели пуль в векторе или просто перейду на list и буду через готовый указатель проходить элементы для проверок и прочего. Благодарю.

Добавлено через 2 минуты
Цитата Сообщение от Croessmah Посмотреть сообщение
Но всё равно не надо одну и ту же текстуру по сто раз загружать.
Ну, если скорость будет не ахти, то заморочусь.
0
Неэпический
 Аватар для Croessmah
18128 / 10712 / 2064
Регистрация: 27.09.2012
Сообщений: 27,002
Записей в блоге: 1
06.03.2020, 00:18
J5, вам следует подтянуть знания по структурам данных, если вы действительно хотите разобраться с происходящим.
0
J5
25 / 25 / 9
Регистрация: 22.12.2013
Сообщений: 107
06.03.2020, 00:28  [ТС]
Цитата Сообщение от Croessmah Посмотреть сообщение
J5, вам следует подтянуть знания по структурам данных, если вы действительно хотите разобраться с происходящим.
Почему же? Всё понятно и просто. Ещё бы не было модных, ненужных недословечек ("аллокации") и всё стало бы замечательно.
0
 Аватар для zayats80888
6344 / 3515 / 1428
Регистрация: 07.02.2019
Сообщений: 8,981
06.03.2020, 00:33
Лучший ответ Сообщение было отмечено Antikl как решение

Решение

Цитата Сообщение от J5 Посмотреть сообщение
Или предложенная идея неподходящая...
Объясните подробнее почему, а я попробую обосновать.

Не по теме:


З.Ы. "Тяжесть" текстуры - это не только размер. Что бы лучше понимать, то

Цитата Сообщение от J5 Посмотреть сообщение
player_shells[player_shells.size() - 1].picture_t.loadFromFile("0.png");
1) программа отправляет запрос системе - хочу читать файл
2) система выделяет в памяти буфер, и копирует туда файл с диска
3) ваша программа читает с того буффера в свой буфер, попутно конвертируя во внутренний формат
4) затем отправляет это openGL(там аллоцируктся свой буфер в памяти)
5) затем openGL отдает это видеокарте, и она(драйвер) загружает это в свою память(хорошо если через DMI)
И вы всю эту прелесть хотите делать для каждой пули каждый кадр?

1
J5
25 / 25 / 9
Регистрация: 22.12.2013
Сообщений: 107
06.03.2020, 00:41  [ТС]
Цитата Сообщение от zayats80888 Посмотреть сообщение
З.Ы. "Тяжесть" текстуры - это не только размер.
Известно что такое процессорное время. Не утруждайтесь.
Цитата Сообщение от zayats80888 Посмотреть сообщение
Объясните подробнее почему, а я попробую обосновать.
Да понятно на что вы будете указывать. Вы уже всё написали. Ваш подход ясен. Я привёл альтернативу о том случае, когда число необходимых копий текстур неизвестно. Мне нужно было проще, с использованием стандартных средств. Выяснилось что вектор при каждом добавлении или удалении полностью пересоздаёт всю имеющуюся у него во владении память. Значит он непригоден.
0
 Аватар для zayats80888
6344 / 3515 / 1428
Регистрация: 07.02.2019
Сообщений: 8,981
06.03.2020, 01:04
Цитата Сообщение от J5 Посмотреть сообщение
Я привёл альтернативу о том случае, когда число необходимых копий текстур неизвестно.
Объясните "необходимость" копий текстуры.
Я догадываюсь, что дело в анимации. Если так, то делается это следующим образом:
Пусть есть набор текстур с кадрами анимации(10 шт, например, хотя для этих целей использую одну texture map).
Вы загружаете эти текстуры(10) один раз в одном экземпляре.
У вас может быть 100500 спрайтов. Для каждого спрайта, в зависимости от кадра его анимации, вы делаете sprite.SetTexture(textureN); (или sprite.SetTextureRect(frame) в случае с texture map). И всё, текстурки спокойно лежат водном месте, а конвейер просто рисует очередной прямоугольник в очередном месте экрана.
0
Неэпический
 Аватар для Croessmah
18128 / 10712 / 2064
Регистрация: 27.09.2012
Сообщений: 27,002
Записей в блоге: 1
06.03.2020, 05:50
Лучший ответ Сообщение было отмечено Antikl как решение

Решение

Выяснилось что вектор при каждом добавлении или удалении полностью пересоздаёт всю имеющуюся у него во владении память.
С чего вы это взяли? Здесь вам этого никто не писал.
Я ж говорю, разберитесь со структурами данных.


zayats80888, наверное, бесполезно. ТС уже уверовал.
1
J5
25 / 25 / 9
Регистрация: 22.12.2013
Сообщений: 107
06.03.2020, 11:12  [ТС]
Цитата Сообщение от Croessmah Посмотреть сообщение
С чего вы это взяли? Здесь вам этого никто не писал.
Я ж говорю, разберитесь со структурами данных.
Надо будет - разберусь. Пока интересовал только один вопрос. На него получен ответ.
Цитата Сообщение от zayats80888 Посмотреть сообщение
Объясните "необходимость" копий текстуры.
Оказалось что хватит и одной. Это так. Ошибся в этом.

Добавлено через 51 минуту
Цитата Сообщение от Croessmah Посмотреть сообщение
Выяснилось что вектор при каждом добавлении или удалении полностью пересоздаёт всю имеющуюся у него во владении память.
С чего вы это взяли? Здесь вам этого никто не писал.
Цитата Сообщение от zayats80888 Посмотреть сообщение
Происходит так потому, что спрайт хранит ссылку на текстуру, а вектор при добавлении реаллоцирует свои данные.
К вопросу о вере. Как это нужно трактовать без деталей?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
06.03.2020, 11:12
Помогаю со студенческими работами здесь

Наложение текстуры в Maya: отображение сложных объектов в программе
Доброго времени! Есть такая проблема, при наложении текстуры на простенькие модели всё работает как надо(наколенники справа), но при...

Css3 оформление списка
Помогите оформить css для списка как тут: В подразделе &quot;Теxнические xарактеристики&quot; ссылка на источник Добавлено через...

Оформление нумерованного списка
Делаю нумерованный список c красивым оформлением наподобие того, что рассмотрен в первом примере вот по этой ссылке...

Оформление списка записей
Приветствую! Столкнулся с проблемой. Есть страница (скрин 1). В данный момент все записи из различных рубрик выводятся на странице в виде...

Определить в классе статическую компоненту - указатель на начало связанного списка объектов и функцию просмотра списка
Помогите пожалуйста доделать программу. Необходимо определить в классе статическую компоненту - указатель на начало связанного списка...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Unity 4D
GameUnited 13.06.2025
Четырехмерное пространство. . . Звучит как что-то из научной фантастики, правда? Однако для меня, как разработчика со стажем в игровой индустрии, четвертое измерение давно перестало быть абстракцией из. . .
SSE (Server-Sent Events) в ASP.NET Core и .NET 10
UnmanagedCoder 13.06.2025
Кажется, Microsoft снова подкинула нам интересную фичу в новой версии фреймворка. Работая с превью . NET 10, я наткнулся на нативную поддержку Server-Sent Events (SSE) в ASP. NET Core Minimal APIs. Эта. . .
С днём независимости России!
Hrethgir 13.06.2025
Решил побеседовать, с утра праздничного дня, с LM о завоеваниях. То что она написала о народе, представителем которого я являюсь сам сначала возмутило меня, но дальше только смешило. Это чисто. . .
Лето вокруг.
kumehtar 13.06.2025
Лето вокруг. Наполненное бурями и ураганами событий. На фоне магии Жизни, священной и вечной, неумелой рукой человека рисуется панорама душевного непокоя. Странные серые краски проникают и. . .
Популярные LM модели ориентированы на увеличение затрат ресурсов пользователями сгенерированного кода (грязь -заслуги чистоплюев).
Hrethgir 12.06.2025
Вообще обратил внимание, что они генерируют код (впрочем так-же ориентированы разработчики чипов даже), чтобы пользователь их использующий уходил в тот или иной убыток. Это достаточно опытные модели,. . .
Топ10 библиотек C для квантовых вычислений
bytestream 12.06.2025
Квантовые вычисления - это та область, где теория встречается с практикой на границе наших знаний о физике. Пока большая часть шума вокруг квантовых компьютеров крутится вокруг языков высокого уровня. . .
Dispose и Finalize в C#
stackOverflow 12.06.2025
Работая с C# больше десяти лет, я снова и снова наблюдаю одну и ту же историю: разработчики наивно полагаются на сборщик мусора, как на волшебную палочку, которая решит все проблемы с памятью. Да,. . .
Повышаем производительность игры на Unity 6 с GPU Resident Drawer
GameUnited 11.06.2025
Недавно копался в новых фичах Unity 6 и наткнулся на GPU Resident Drawer - штуку, которая заставила меня присвистнуть от удивления. По сути, это внутренний механизм рендеринга, который автоматически. . .
Множества в Python
py-thonny 11.06.2025
В Python существует множество структур данных, но иногда я сталкиваюсь с задачами, где ни списки, ни словари не дают оптимального решения. Часто это происходит, когда мне нужно быстро проверять. . .
Работа с ccache/sccache в рамках C++
Loafer 11.06.2025
Утилиты ccache и sccache занимаются тем, что кешируют промежуточные результаты компиляции, таким образом ускоряя последующие компиляции проекта. Это означает, что если проект будет компилироваться. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru
OSZAR »