Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/35: Рейтинг темы: голосов - 35, средняя оценка - 4.60
Автор FAQ
 Аватар для insideone
3687 / 964 / 114
Регистрация: 10.01.2010
Сообщений: 2,550

Вопросы по std::list

21.05.2010, 23:08. Показов 7400. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
1. Как обменять в списке два его элемента? Желательно большое быстродействие т.е. без удалить оба а потом добавить в другом порядке, т.к. хранятся крупные объекты
2. Для чего нужен метод max_size? Ведь список динамически расширяется и может содержать сколь угодно элементов...

Добавлено через 20 часов 8 минут
up up
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
21.05.2010, 23:08
Ответы с готовыми решениями:

Реализация std::list, сложность list::size()
Часто приходилось пользоваться Listом, но сейчас столкнулся с небольшой неоднозначностью. Согласно документации, метод size() в 11...

Потокобезопасность std::map::end, std::list::end
Собсна сабж, могу ли я без синхронизаций выполнять подобного рода код if (myIter != map.end()) // != list.end() {...} myIter =...

Разъясните код пжлст(выдает ошибку:cannot convert from 'class std::list<class c_bullet *,class std::allocator<class c_bullet *> >::iterator' to 'int')
Есть такие строки: std::list&lt;c_bullet*&gt; Bullets; ... for(auto i = Bullets.begin(); i != Bullets.end(); /**/) В строке цикла вот...

11
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
 Аватар для easybudda
12843 / 7592 / 1766
Регистрация: 25.07.2009
Сообщений: 13,973
21.05.2010, 23:14
Цитата Сообщение от insideone Посмотреть сообщение
т.к. хранятся крупные объекты
Тогда лучше указатели в списке хранить, а не сами объекты. А так вот: http://www.cplusplus.com/reference/algorithm/swap/
1
Автор FAQ
 Аватар для insideone
3687 / 964 / 114
Регистрация: 10.01.2010
Сообщений: 2,550
21.05.2010, 23:52  [ТС]
Цитата Сообщение от easybudda Посмотреть сообщение
Тогда лучше указатели в списке хранить, а не сами объекты
Возможно, т.е. я делаю x = new object а потом контейнер.add(x) и в нем теперь хранится указатель. Не забыть бы теперь удалить...

А swap это так?
C++
1
2
3
iterator i1;
iterator i2;
(*i2).swap(*i2);
А то я начал свой список писать но понял что проку с него будет не больше чем со стандартного вот только обмена местами нехватает, т.к. в игре есть одно меню и второе меню, чтобы одно перекрывало другое и наоборот можно просто объекты в очереди прорисовки (список) менять местами
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
 Аватар для easybudda
12843 / 7592 / 1766
Регистрация: 25.07.2009
Сообщений: 13,973
21.05.2010, 23:55
Цитата Сообщение от insideone Посмотреть сообщение
т.е. я делаю x = new object а потом контейнер.add(x)
Ага, примерно так.
Цитата Сообщение от insideone Посмотреть сообщение
А swap это так?
почти...
C++
1
std::swap(*i1, *i2);
1
Автор FAQ
 Аватар для insideone
3687 / 964 / 114
Регистрация: 10.01.2010
Сообщений: 2,550
22.05.2010, 00:09  [ТС]
А метод insert работает достаточно быстро? Не перетряхивая весь список?
Меня пугает просто посмотрел
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
    template<class _It>
        void __CLR_OR_THIS_CALL _Insert(const_iterator _Where, _It _First, _It _Last,
            input_iterator_tag)
        {   // insert [_First, _Last) at _Where, input iterators
        replace(_Where, _Where, _First, _Last);
        }
    _Myt& __CLR_OR_THIS_CALL replace(const_iterator _First, const_iterator _Last,
        const_iterator _First2, const_iterator _Last2)
        {   // replace [_First, _Last) with [_First2, _Last2), const_iterators
        if (_First2 == _Last2)
            erase(_Pdif(_First, begin()), _Pdif(_Last, _First));
        else
            replace(_Pdif(_First, begin()), _Pdif(_Last, _First),
                &*_First2, _Last2 - _First2);
        return (*this);
        }
И все вставки push в лист через insert сделаны.
0
332 / 247 / 32
Регистрация: 13.12.2009
Сообщений: 589
22.05.2010, 00:16
Цитата Сообщение от insideone Посмотреть сообщение
Для чего нужен метод max_size? Ведь список динамически расширяется и может содержать сколь угодно элементов...
это константный метод, и как раз таки показывает чему равно "сколь угодно" элементов )
а так как size() возвращает long, max_size() вернёт 2^32 - 1

Цитата Сообщение от insideone Посмотреть сообщение
А метод insert работает достаточно быстро? Не перетряхивая весь список?
на list все втавки быстро работают, в отличии от вектора
0
Автор FAQ
 Аватар для insideone
3687 / 964 / 114
Регистрация: 10.01.2010
Сообщений: 2,550
22.05.2010, 00:19  [ТС]
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
    abc A(1,2,3);
    abc B(2,3,4);
    abc C(3,4,5);
 
    std::list<abc> qw;
    qw.push_back(A);
    qw.push_back(B);
    qw.push_back(C);
    std::list<abc>::iterator i1 = qw.begin();
    std::list<abc>::iterator i2 = i1; i2++;
    std::swap(i1, i2);
    std::list<abc>::iterator i = qw.begin();
    for (; i != qw.end(); i++)
        std::cout << i->a;
Вывод:
123
Что то не поменялось...

Добавлено через 2 минуты
Цитата Сообщение от Roma_F Посмотреть сообщение
на list все втавки быстро работают, в отличии от вектора
По логике то да, но глядя на адский код stl вкрадываются подозрения и руки чешутся написать попроще как то
0
332 / 247 / 32
Регистрация: 13.12.2009
Сообщений: 589
22.05.2010, 00:23
Цитата Сообщение от insideone Посмотреть сообщение
но глядя на адский код stl вкрадываются подозрения и руки чешутся написать попроще как то
может для игры и имеет смысл
0
бжни
 Аватар для alex_x_x
2473 / 1684 / 135
Регистрация: 14.05.2009
Сообщений: 7,162
22.05.2010, 00:24
std::list<abc>::iterator i1 = qw.begin();
std::list<abc>::iterator i2 = i1; ++i2;
std::swap(*i1, *i2);
std::list<abc>::iterator i = qw.begin();
for (; i != qw.end(); i++)
std::cout << i->a;
0
Автор FAQ
 Аватар для insideone
3687 / 964 / 114
Регистрация: 10.01.2010
Сообщений: 2,550
22.05.2010, 00:31  [ТС]
alex_x_x, и все же 123 )

Цитата Сообщение от Roma_F Посмотреть сообщение
может для игры и имеет смысл
я вот и мечусь, то свое напишу то думаю зачем, свое долго отлаживать приходится, надоело очень...
0
332 / 247 / 32
Регистрация: 13.12.2009
Сообщений: 589
22.05.2010, 00:34
Цитата Сообщение от alex_x_x Посмотреть сообщение
++i2;
дело не в этом, swap правильно сработал, он поменял местами итераторы

C++
1
std::swap(*i1, *i2);
0
бжни
 Аватар для alex_x_x
2473 / 1684 / 135
Регистрация: 14.05.2009
Сообщений: 7,162
22.05.2010, 00:41
*дубль*

Добавлено через 25 секунд
Цитата Сообщение от Roma_F Посмотреть сообщение
swap правильно сработал, он поменял местами итераторы
я это исправил
во, будет вам счастье

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <list>
#include <iostream>
#include <algorithm>
 
using namespace std;
 
void print( int *el ){
    cout << *el << endl;
}
 
int main(){
    int *a = new int(1), *b = new int(2);
    list<int*> l;
    l.push_back(a);
    l.push_back(b);
    list<int*>::iterator it = l.begin();
    swap( *it, *(++list<int*>::iterator(it)) );
    for_each( l.begin(), l.end(), print );
    return 0;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
22.05.2010, 00:41
Помогаю со студенческими работами здесь

Вопрос по std::list
Не произойдёт ли здесь какая-нибудь ошибка после удаления элемента из списка? std::list&lt;int&gt; myList; ...

Static std::list
Добрый день, помогите решить проблему. &quot;Каждое статическое поле должно быть проинициализировано до main() явным образом&quot; - как я...

Сортировка std::list
Есть такой фрагмент програми. Создаю функцию для сортировки list. Вроде все правильно. В класе перегружены оператори &lt; i =. Не знаю что...

Переход от структуры к std::list
возникла необходимость переписать часть старого кода написаного лет ...дцать назад. было typedef struct _LISTMEM { ...

Удаление значения в std::list
Имеем метод для удаления, где value - предов. значение, а list&lt;films&gt; coll - копия др. списка(который уже наполнен данными). ...


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
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
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru