Форум программистов, компьютерный форум, киберфорум
Visual C++
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/4: Рейтинг темы: голосов - 4, средняя оценка - 5.00
430 / 384 / 200
Регистрация: 12.08.2011
Сообщений: 1,610
1

Создание вектора wstring через указатели

16.07.2013, 10:38. Показов 832. Ответов 9
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Вот так правильно? Обратите особое внимание на цикл do-while.

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
vector<wstring> MachinesList;
 
bool createMachinesList() {
    IVirtualBox* VirtualBox;
    HRESULT rc = VirtualBoxClient->get_VirtualBox(&VirtualBox);
    if (FAILED(rc)) return false;
    
    SAFEARRAY* MachinesArray = NULL;
    rc=VirtualBox->get_Machines(&MachinesArray);
    if (FAILED(rc)) return false;
    
    IMachine **Machines;
    rc = SafeArrayAccessData (MachinesArray, (void **) &Machines);
    if (FAILED(rc)) return false;
 
    ULONG i = MachinesArray->rgsabound[0].cElements;
    if (i == 0) return false;
    MachinesList.reserve(i);
    
    do {
        wstring* MachineID = NULL;
        rc = Machines[--i]->id(&MachineID);
        if FAILED(rc) return false;
        MachinesList.push_back(*MachineID);
    } while (i != 0);
    
    SafeArrayUnaccessData (MachinesArray);
    SafeArrayDestroy (MachinesArray);
    return true;
}
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
16.07.2013, 10:38
Ответы с готовыми решениями:

Не меняются значения элементов вектора через указатели
Вот учусь программировать. Дошел до всяких там указателей. Программа выводит два числа: ...

Через указатели на указатели посчитать сумму двух чисел и записать в третье
1. Через указатели на указатели посчитать сумму двух чисел и записать в третье. 2. Написать...

Написать программу сортировки через указатели на указатели
Вот моя программа #include &lt;iostream&gt; #include &lt;conio.h&gt; #include &lt;string&gt; using namespace...

Указатели, вектора
Добрый день! Помогите написать код, желательно на С Тема: указатели на функции Нужно написать...

9
Эксперт С++
8483 / 6150 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
20.07.2013, 15:26 2
C++
1
2
3
4
5
6
7
do 
  {
     wstring* MachineID = NULL;
     rc = Machines[--i]->id(&MachineID);
     if FAILED(rc) return false;
     MachinesList.push_back(*MachineID);
  } while (i != 0);
А где тут присвоение значения MachineID ?

Или Machines[--i]->id(); меняет указатель MachineID?
0
430 / 384 / 200
Регистрация: 12.08.2011
Сообщений: 1,610
21.07.2013, 09:04  [ТС] 3
Цитата Сообщение от Avazart Посмотреть сообщение
А где тут присвоение значения MachineID ?

Или Machines[--i]->id(); меняет указатель MachineID?
Да, id() вызывается с параметром &MachineID. А у вас эта фукнция отображается так, как Вы процитировали? Странно.
0
Эксперт С++
8483 / 6150 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
21.07.2013, 13:05 4
Так что не так работает ?
А то тяжело что-либо по коду сказать.
0
430 / 384 / 200
Регистрация: 12.08.2011
Сообщений: 1,610
21.07.2013, 18:32  [ТС] 5
Цитата Сообщение от Avazart Посмотреть сообщение
Так что не так работает ?
Я даже не пробовал запускать пока, проверяю по частям, нет ли явных ошибок типа отсутствующих/лишних звёздочек.

А то тяжело что-либо по коду сказать.
Вот почему С++ является самым моим нелюбимым языком. Использую его по минимуму, и только там, где никак не обойтись. Обычно я нужные функции выношу в отдельную ДЛЛ. В половине случаев заказываю её фрилансеру. Собственно, это оно и есть. Я получил исходники, но мне кое-что не понравилось, и я решил чуточку переписать.
0
Эксперт С++
8483 / 6150 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
21.07.2013, 18:42 6
Да как бы дело не в С++ а в "огрызке кода" вырванного из контекста, кроме того стиль написания как по мне не очень, но это возможно по тому что код использует какие-то либы Си

Добавлено через 5 минут
C++, STL
C++
1
vector<wstring> MachinesList;
В духе Си
C
1
2
3
IVirtualBox* VirtualBox;
HRESULT rc = VirtualBoxClient->get_VirtualBox(&VirtualBox);
if (FAILED(rc)) return false;
0
430 / 384 / 200
Регистрация: 12.08.2011
Сообщений: 1,610
22.07.2013, 09:35  [ТС] 7
Цитата Сообщение от Avazart Посмотреть сообщение
Да как бы дело не в С++ а в "огрызке кода" вырванного из контекста, кроме того стиль написания как по мне не очень, но это возможно по тому что код использует какие-то либы Си
Я же объяснил, что сам алгоритм написан другим человеком, а я, по большому счёту, переоформил в своём (уж наверняка не самом лучшем, но в своём) стиле. Например, изначально код состоял из трёх больших функций, а я, наоборот, пишу настолько маленькие функции, насколько это возможно. Иногда даже две-три строчки. Но в данном случае это затруднительно, потому что используется Virtualbox SDK. Всё это, видимо, и наложило какой-то отпечаток.

P.S. В принципе, от vector можно отказаться, тем более что строки имеют строго определённую длину (это UUID). Но я плохо знаю C++, вот и решил попроще и понадёжнее сделать.
0
Эксперт С++
8483 / 6150 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
22.07.2013, 12:48 8
Цитата Сообщение от Vtulhu Посмотреть сообщение
потому что используется Virtualbox SDK.
Обвернуть нужный ф-ционал API в класс что бы он не маячил си стилем.

Добавлено через 2 минуты
Цитата Сообщение от Vtulhu Посмотреть сообщение
а я, наоборот, пишу настолько маленькие функции, насколько это возможно.
Обычно разбивают по назначению, а не по размеру ( и конечно с учетом дальнейшего пользователя.)
0
430 / 384 / 200
Регистрация: 12.08.2011
Сообщений: 1,610
22.07.2013, 14:43  [ТС] 9
Цитата Сообщение от Avazart Посмотреть сообщение
Обвернуть нужный ф-ционал API в класс что бы он не маячил си стилем.
Была у меня такая мысль, но я счёл это избыточным. Это довольно простой враппер вокруг одной функции VB SDK.

Обычно разбивают по назначению, а не по размеру ( и конечно с учетом дальнейшего пользователя.)
Я и не говорил, что разбиваю по размеру. Разумеется, в зависимости от назначения может получиться функция и в две, и в двадцать строк. И даже функция из одной строки иногда имеет смысл. Речь шла о том, что в данной ситуации я бы ещё кое-где сделал разбиения, но не могу. Частично из-за специфики SDK, частично из-за своего незнания С++.

В общем, дискуссия пошла куда-то не туда. Меня интересовало только, не напортачил ли я в этом куске кода. В остальных кусках я ничего особо не менял, только переставлял местами. Так что там я уверен. Можете посоветовать, как оптимизировать эту часть. Например, если я правильно понимаю, можно vector легко на массив wchar заменить. Длина одной строки заранее известна. Количество строк заранее неизвестно, но уж точно не более десятка. После создания массива он уже не будет меняться, только читать из него.
0
Эксперт С++
8483 / 6150 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
22.07.2013, 14:59 10
Цитата Сообщение от Vtulhu Посмотреть сообщение
Частично из-за специфики SDK
Я не работал с ним и не знаю, нужно смотреть именно в документацию что бы что-то сказать.
Стоит обратить особое внимание на освобождение ресурсов ( хендлов, строк итп)

Добавлено через 2 минуты
Цитата Сообщение от Vtulhu Посмотреть сообщение
C++
1
rc = Machines[--i]->id(&MachineID);
В данном случае до конца не ясно как работать с присваиваемым указателем, нужно ли освобождать как либо память по его адресу.

Добавлено через 4 минуты
Если бы создавать класс, то можно было бы организовать вывод ошибок( и вероятно можно получить их описание) в лог, что позволило бы удобно отлаживать программу и судить от правильности кода.
1
22.07.2013, 14:59
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
22.07.2013, 14:59
Помогаю со студенческими работами здесь

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

Создание контейнера (вектора), хранящего вектора разной размерности
Можно ли в матлабе создать вектор, который будет хранить вектора разной размерности? Добавлено...

Вектора Указатели и RDP ActiveX
1 std::vector&lt;TMsRdpClient9NotSafeForScripting&gt; *rdp = new...

Объясните, что означает wstring input = L""; и wstring output = L""; ?
Непонятно особенно L&quot;&quot;.


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Как использовать комментарии в JSON
InfoMaster 18.01.2025
JSON (JavaScript Object Notation) представляет собой легкий и широко используемый формат обмена данными, который стал стандартом де-факто для веб-приложений и программных интерфейсов. При работе с. . .
Как заставить git pull перезаписать локальные файлы в Git
InfoMaster 18.01.2025
Проблема перезаписи локальных файлов в Git При работе с системой контроля версий Git разработчики часто сталкиваются с ситуацией, когда необходимо синхронизировать локальный репозиторий с. . .
Что значит оператор --> в C++ и для чего он нужен
InfoMaster 18.01.2025
В языке программирования C++ оператор -> (стрелка) является одним из фундаментальных элементов синтаксиса, обеспечивающим удобный доступ к членам структур и классов через указатели. Этот оператор был. . .
Как отменить git add до коммита в Git
InfoMaster 18.01.2025
В современной разработке программного обеспечения система контроля версий Git играет ключевую роль в управлении изменениями кода. Одной из наиболее частых операций, с которой сталкиваются. . .
Какой MIME-тип JSON указывать и когда
InfoMaster 18.01.2025
В современном мире веб-разработки формат JSON (JavaScript Object Notation) стал неотъемлемой частью обмена данными между клиентом и сервером. Этот легковесный формат хранения и передачи данных. . .
Как переименовать ветку (branch) в Git
InfoMaster 18.01.2025
Одним из важнейших аспектов работы с Git является правильное управление ветками, которые позволяют разработчикам эффективно организовывать процесс разработки и тестирования новых функций. Особое. . .
Как удалить определенный элемент из массива в JavaScript
InfoMaster 18.01.2025
В современной веб-разработке массивы являются одной из ключевых структур данных, с которыми приходится работать разработчикам JavaScript. Операция удаления элементов из массива представляет собой. . .
Что такое yield в Python и как это работает
InfoMaster 18.01.2025
Концепция генераторов и yield в Python В мире программирования на Python существуют мощные инструменты для эффективной работы с последовательностями данных, и одним из таких инструментов является. . .
В чем разница между git pull и git fetch в Git
InfoMaster 18.01.2025
Работая в командах разработчиков, специалисты постоянно сталкиваются с необходимостью синхронизации локальных репозиториев Git с удаленными серверами. Две команды - git fetch и git pull -. . .
Как удалить ветку (branch) в Git в локальном и удалённом репозитории
InfoMaster 18.01.2025
Ветка в Git представляет собой легковесный указатель на определенный коммит в истории разработки. Когда разработчики создают новую ветку, они получают возможность вносить изменения в код, не. . .
Почему обработка сортированного массива быстрее, чем несортированног­­о
InfoMaster 18.01.2025
Влияние сортировки массивов на скорость обработки данных При разработке программного обеспечения оптимизация производительности играет ключевую роль в создании эффективных приложений. Одним из. . .
Зачем нужны свойства в классе, если есть поля
InfoMaster 18.01.2025
Понятие свойств и полей в классах В современном объектно-ориентированном программировании поля и свойства являются фундаментальными элементами классов, которые обеспечивают хранение и управление. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru