Форум программистов, компьютерный форум, киберфорум
C/C++: WinAPI
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
13 / 12 / 9
Регистрация: 09.11.2012
Сообщений: 367
Записей в блоге: 1

Инициализация виртуального списка из контейнера list

23.11.2013, 03:29. Показов 995. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
инициализирую виртуальный список из контейнера типа List
что делаю не так?

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
case LVN_GETDISPINFO:
        {
          list<data>::iterator it=directory.begin();
          NMLVDISPINFO* plvdi = (NMLVDISPINFO*)lParam;
          switch (plvdi->item.iSubItem)//заполняем строку
          {
          case 0://"имя файла"
            {
              plvdi->item.pszText = (LPSTR)(*(it->_name).c_str());
              //plvdi->item.pszText = (LPSTR)directory[plvdi->item.iItem]._name.c_str();
              it++;
              break;
            }
          case 1://"путь к файлу"
            {
              plvdi->item.pszText = (LPSTR)(*(it->_path).c_str());
              //plvdi->item.pszText = (LPSTR)directory[plvdi->item.iItem]._path.c_str();
              it++;
              break;
            }
            case 2://"размер файла"
            {
              plvdi->item.pszText = (LPSTR)(*(it->_filesize).c_str());
              //plvdi->item.pszText = (LPSTR)directory[plvdi->item.iItem]._filesize.c_str();
              it++;
              break;
            }
            case 3://"дата"
            {
              plvdi->item.pszText = (LPSTR)(*(it->_creation).c_str());
              //plvdi->item.pszText = (LPSTR)directory[plvdi->item.iItem]._creation.c_str();
              it++;
              break;
            }
          default:
            return 0;
          }
        }
        break;
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
23.11.2013, 03:29
Ответы с готовыми решениями:

Определить предикат Р(List,Х) который истинен если Х состоит из пар элементов списка List,сумма которых больше половины элементов List
Помогите пожалуйста написать программу,буду очень благодарен,заранее спасибо! Определить предикат Р(List,Х) который истинен если Х...

Сортировка контейнера list
Как отсортировать (с помощью sort()) и вывести в текстовый документ список l ? код программы: #include &lt;iostream.h&gt; #include...

Использование контейнера list
Не могу из методички с задачками по контейнерам решить пару из них. Есть список целых чисел (std::list&lt;int&gt;). Нужно, за...

4
Заблокирован
23.11.2013, 05:24
А с чего Вы вообще взяли, что делаете что-то не так?
Компилятор выдаёт ошибку? Укажите текст ошибки и соответствующий номер строки.
Программа компилируется, но работает неправильно? Поясните, чем неправильно.

Телепатов нет.
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33378 / 21502 / 8236
Регистрация: 22.10.2011
Сообщений: 36,899
Записей в блоге: 11
23.11.2013, 12:36
Цитата Сообщение от Водяной Змей Посмотреть сообщение
А с чего Вы вообще взяли, что делаете что-то не так?
С того, что программа работать не будет. С итераторами напутано.

slipp1, под свои названия полей и типы подкрути сам (не забудь подключить <iterator>):

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
                case LVN_GETDISPINFO:
                {
                    LV_DISPINFO *pLvdi = (LV_DISPINFO *)lParam;
                    std::list<Item>::iterator it = vec.begin();
                    std::advance(it, pLvdi->item.iItem); // Продвигаемся на нужный элемент list-а
 
                    switch (pLvdi->item.iSubItem)
                    {
                        case COL_FIRST: // title
                            pLvdi->item.pszText = const_cast<LPWSTR>(it->First.c_str());
                            break;
                        case COL_SECOND: // pid
                            pLvdi->item.pszText = const_cast<LPWSTR>(it->Second.c_str());
                            break;
                        case COL_THIRD: // threads
                            pLvdi->item.pszText = const_cast<LPWSTR>(it->Third.c_str());
                            break;
                        case COL_FOURTH: // prio
                            pLvdi->item.pszText = const_cast<LPWSTR>(it->Fourth.c_str());
                            break;
                        default:
                            return 0;
                    }
                }
                break;
Ну, и, разумеется, сортировку придется переписывать...
1
13 / 12 / 9
Регистрация: 09.11.2012
Сообщений: 367
Записей в блоге: 1
23.11.2013, 17:00  [ТС]
вот так сделал:
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
case LVN_GETDISPINFO:
        {
          NMLVDISPINFO* pLvdi = (NMLVDISPINFO*)lParam;
          std::list<data>::iterator it = directory.begin();
          std::advance(it, pLvdi->item.iItem); // Продвигаемся на нужный элемент
 
          switch (pLvdi->item.iSubItem)//заполняем строку
          {
          case 0://"имя файла"
            {
              pLvdi->item.pszText =(LPSTR)*(it->_name).c_str();
              //pLvdi->item.pszText = (LPSTR)directory[pLvdi->item.iItem]._name.c_str();
              break;
            }
          case 1://"путь к файлу"
            {
              pLvdi->item.pszText =(LPSTR)*(it->_path).c_str();
              //pLvdi->item.pszText = (LPSTR)directory[pLvdi->item.iItem]._path.c_str();
              break;
            }
            case 2://"размер файла"
            {              
              pLvdi->item.pszText =(LPSTR)*(it->_filesize).c_str();
              //pLvdi->item.pszText = (LPSTR)directory[pLvdi->item.iItem]._filesize.c_str();
              break;
            }
            case 3://"дата"
            {
              pLvdi->item.pszText =(LPSTR)*(it->_creation).c_str();
              //pLvdi->item.pszText = (LPSTR)directory[pLvdi->item.iItem]._creation.c_str();
              break;
            }
          default:
            return 0;
          }
        }
        break;
при заполнении контейнера
шлю такое сообщение для обновления списка:
C++
1
SendMessage(hwnd,ID_REFRESH,0,0);
реализация обновления такова:
C++
1
2
3
4
5
6
7
case ID_REFRESH://обновление списка
    {
      ListView_SetItemCountEx(hWndList,directory.size(),LVSICF_NOSCROLL);
      ListView_RedrawItems(hWndList, 0, directory.size()-1);
      UpdateWindow(hWndList);
    }
    return TRUE;
с вектором все работало...

очевидно реализация блока
C++
1
case ID_REFRESH:
для вектора отличается от реализации для списка...

Добавлено через 5 минут
убрал разыменование (*) итератора. good

Добавлено через 40 секунд
зачем здесь const_cast?
C++
1
pLvdi->item.pszText = const_cast<LPWSTR>(it->First.c_str());
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33378 / 21502 / 8236
Регистрация: 22.10.2011
Сообщений: 36,899
Записей в блоге: 11
23.11.2013, 17:10
Цитата Сообщение от slipp1 Посмотреть сообщение
зачем здесь const_cast?
Следы от прошлой реализации, с vector-ом и

C++
1
const Item &it = vec[pLvdi->item.iItem];
В случае с list-ом можно убрать...
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
23.11.2013, 17:10
Помогаю со студенческими работами здесь

Узнать длину контейнера List
Гдето видел List.Length(), но в С# этого нету. как быть?

Указатель на элемент контейнера list
Здравия желаю. Вопрос такой: будет/может ли меняться адрес элемента, стоящего за удаляемым. Если я, например, передам ссылку на нужный...

Использование контейнера List<> в качестве ссылки
Доброго времени суток! Опять проблема, опять спрашиваю;) Есть у нас: int currentValue0; int currentValue1; int currentValue2; ...

Перегрузка оператора индексирования для контейнера list
Здравствуйте помогите перегрузить оператор индексирования для контейнера list это последнее задание из домашнего задания,преподователь...

В чем ошибка? программа с использованием контейнера list
/*Написать программу,моделирующую управление каталогом в файловой сис* теме. Для каждого файла в каталоге содержатся следующие...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru