Вопросы с тегами [c++11]

1

голосов
1

ответ
23

Просмотры

Инициализация вектора в равномерной инициализации

Я использую тест следующего кода класса {общественности: тест (станд :: вектор Обл) {авто а = ули [0]; а = «В»; } Тест () {} Const станд :: MultiMap _var = {{0x01, {{0x0F, станд :: вектор { "А", "В", "С", "D"}}}}}; }; INT основных () {тест т; станд :: соиЬ
Rajeshwar
1

голосов
2

ответ
40

Просмотры

Передача списка инициализации в конструктор вектора на основе

Я в настоящее время теста следующего кода класса {общественность: тест (станд :: вектор НТР) {} тест () {} Const зОго :: MultiMap _var = {{0x01, {{0x0F, { "A", "B", "CD"} } } } }; }; INT основных () {тест т; } Ошибка: main.cpp: 29: 9: ошибка: не удалось преобразовать '{{1, {{15, { "А", "В", "С", "D"}}}}}' от '' к 'сопзЬ станд :: MultiMap'}; ^ Я хотел бы знать, почему прохождение { "A", "B", "C", "D"} к StD :: вектор строка) не удается? Любые предложения о том, как я могу решить эту проблему?
Rajeshwar
3

голосов
1

ответ
17

Просмотры

станд :: is_constructible на неполном типа

У меня есть следующий код: #include класса А; ИНТ основной () {станд :: соиЬ
R_Kapp
0

голосов
1

ответ
54

Просмотры

Заполнение зОго :: вектор исходных данных

Мне нужно, чтобы заполнить вектор с исходными данными, иногда 2 байта, иногда 8 ... Я в конечном итоге с помощью этой функции шаблона: шаблон аннулируются fillVector (станд :: вектор & Dest, T т) {автоматический PTR = reinterpret_cast (& т); dest.insert (dest.end (), PTR, PTR + SizeOf (т)); } С этим можно заполнить вектор вроде этого: fillVector (ДСТ, 32bitdata); fillVector (ДСТ, 16bitdata); Мне было интересно, если что-то еще подобное уже существует в стандартной библиотеке, может быть, я просто изобретал колесо
ErniBrown
1

голосов
1

ответ
5.5k

Просмотры

“is private within this context” is being thrown for function which should not be private (GCC 5.3.0, C++11)

Я пытаюсь создать очередь, которая требует создания другого объекта, хранящегося в очереди. Ошибки binary.cpp: В функции 'Int основного ()': binary.cpp: 183: 1: ошибка: 'Очередь :: Очередь (Т) [с Т = двоичным *]' является частной очередь :: Queue (T пункт) {^ binary.cpp: 286: 65: ошибка: в этом контексте очереди * очередь = новый Queue (дерево); ^ И binary.cpp: В конкретизации 'Queue :: Queue (T) [с Т = бинарная *]': binary.cpp: 286: 65: требуется от здесь binary.cpp: 132: 1: ошибка: «Ссылка: : Link (T) [с Т = бинарная *]»частная Ссылка :: Ссылка (T элемент) {^ binary.cpp: 184: 7: ошибка: в этом контексте главы = новый Link (пункт); Первый из них является конкретизацией очереди, а второй идет из конструктора Queue, который называется в строке экземпляра в первой ошибке. Важные заявления и определения: шаблонный класс Ссылка {Link (T элемент); Содержание Т;: частная Ссылка * рядом; }; Шаблон Ссылка :: Ссылка (Т элемент) {содержание = элемент; следующая = NULL; } Шаблон класса очереди {очереди (); Очередь (Т элемент); частное: Ссылка * голова; Link * конец; ИНТ длина; }; шаблонного Queue :: Queue (T элемент) {голова = новая Ссылка (пункт); конец = головки; длина = 1; } Класс Link объявлен и определен перед классом Queue, и оба объявлены и определены прежде, чем они используются в коде. Спасибо за ваше время. ИНТ длина; }; шаблонного Queue :: Queue (T элемент) {голова = новая Ссылка (пункт); конец = головки; длина = 1; } Класс Link объявлен и определен перед классом Queue, и оба объявлены и определены прежде, чем они используются в коде. Спасибо за ваше время. ИНТ длина; }; шаблонного Queue :: Queue (T элемент) {голова = новая Ссылка (пункт); конец = головки; длина = 1; } Класс Link объявлен и определен перед классом Queue, и оба объявлены и определены прежде, чем они используются в коде. Спасибо за ваше время.
ceaston7
1

голосов
2

ответ
2.2k

Просмотры

shared_ptr пользовательского аллокатора вместе с пользовательскими Deleter

Можно ли одновременно использовать пользовательский распределитель и пользовательский Deleter в то же время для станд :: shared_ptr? Мне кажется, что нет никакого способа сделать это, так как станд :: allocate_shared не принимает Deleter. А также, единственный разумный подпись Deleter будет что-то вроде пустоты DeleteR (T *, сопзЬ Alloc &), вместо того, чтобы просто ничтожной Deleter (T *). Есть ли способ обойти это ограничение?
Zizheng Tai
1

голосов
2

ответ
61

Просмотры

Может ли объект класса будет создан как именующие только?

Хорошо известная проблема с станд :: lock_guard (и его родственников) в том, что она не работает, как и ожидалось, когда создается только временный объект. Например: станд :: мьютекс MTX; станд :: lock_guard {MTX} // временный объект, не блокирует весь объем зЬй :: lock_guard LCK {MTX} // правильно я попытался эталонные отборочные создать замену, предотвращающую временный объект не создается (во время компиляции) , Следующий код является бесполезной попыткой: #include шаблон структура my_lock {T & MTX; my_lock (Т & т): MTX {T} {блокировка (); } ~ My_lock () {разблокировать (); } Пустот замок () & {mtx.lock (); }; недействительные разблокировки () & {mtx.unlock (); }; }; станд :: мьютекс MTX; INT основных () {my_lock {MTX}; // my_lock
Tootsie
1

голосов
1

ответ
50

Просмотры

Есть ли способ, чтобы построить функцию constexpr, чтобы получить представление бит в двойном?

Есть стандартный способ построить функцию, которая позволяет constexpr преобразования дважды в этом 64 битовом представлении: constexpr uint64_t double_to_uint64_t (двойная d) {?????? } Так что constexpr uint64_t two_bits = double_to_uint64_t (2,0); компилируется? Обратный метод (UInt64 дважды) также представляет интерес.
0kcats
1

голосов
0

ответ
55

Просмотры

Шаблон отказа замещение SFINAE

Следующий код не компилятор с GCC 5.2 или более поздней версией, не пробовал старший компилятор. Ая идея о том, что я делаю неправильно здесь. Оператор # include # include # include шаблон Ьурепате станд :: enable_if :: тип ^ = (Т & LHS, сопзЬ T & РИТ) {LHS = static_cast (static_cast (LHS) ^ static_cast (РИТ)); вернуться LHS; } Шаблон Ьурепате станд :: enable_if :: оператор типа ^ = (Т & LHS, Const S & RHS) {LHS = static_cast (static_cast (LHS) ^ static_cast (RHS)); вернуться LHS; } Перечисление enum_t {красный, синий, зеленый, черный}; #define somedef 2 INT основных () {enum_t Ь = красный; б ^ = somedef; станд :: соиЬ
Sameer Varyani
1

голосов
0

ответ
107

Просмотры

HashMap с станд :: будущее как ключ

Так как мы не можем получить аргументы из Std :: будущего, я пытаюсь поддерживать отображение между стандом :: будущим и стандом :: строкой. Следующее утверждение: станд :: unordered_map карта не выдает следующее сообщение об ошибке: ошибка: не подходит для вызова '(Уст станд :: хэш) (сопзЬ станд :: Будущее &)' │ = • noexcept (declval () (declval () ))> Как я могу решить эту проблему?
UnderWood
1

голосов
1

ответ
43

Просмотры

How can I turn on the auto matching when invoking the template explicit instantiation?

I have two template class, and the Leaf is derived from the Base, then I developed a template function which uses the reference of the Base as its parameter. And set the definition and the instantiation of that function in its source file. The issue happened once I tried to pass the Leaf as the argument of that function. The compiler tries to find the symbol with Leaf without the auto convention as it used to be. // foo.h #ifndef __FOO_H_INCLUDED__ #define __FOO_H_INCLUDED__ #include template void Foo(T &value); #endif // __FOO_H_INCLUDED__ // foo.cpp #include #include template void Foo(T &value) { std::cout
Calvin
1

голосов
0

ответ
77

Просмотры

Размещение нового с различными типами в предопределенные памяти - как гарантировать выравнивание?

Я пытаюсь создать класс, который может быть использован в качестве какого-то общего указателя. Из соображений производительности я хотел бы реализовать функцию фабрики, которая выделяет память для объекта и неподписанных INT счетчика ссылок в одном шаге: шаблон класса SharedPointer {uint8_t * буфер; Т * OBJ; без знака INT * счетчика; Шаблон статического SharedPointer делают (Args && ... арг) {SharedPointer р; p.buffer = новый uint8_t [SizeOf (Т) + SizeOf (беззнаковое целое)]; p.obj = новый (p.buffer) T (станд :: вперед (арг) ...); p.counter = новый (p.buffer + SizeOf (Т)) без знака Int (1); вернуться р; }} И позже, когда общий объект собирается быть удален: ~ SharedPointer () {* counter--; если (* счетчик == 0) {obj-> ~ Т (); удалить буфер []; } } Вопрос в том: это необходимо, чтобы установить правильное выравнивание памяти для выделенного буфера и как это может быть достигнуто? Я знаю alignas ключевое слово, но я не знаю, как она должна быть интегрирована здесь. Обновление: Как указано в комментариях, станд :: aligned_storage может быть использован. Будет ли это возможное решение, то: шаблон класса SharedPointer {структура хранения {станд :: aligned_storage_t OBJ; беззнаковое целочисленное значение счетчика; }; Хранение * буфер; Т * OBJ; без знака INT * счетчика; Шаблон статического SharedPointer делают (Args && ... арг) {SharedPointer р; p.buffer = новый хранения (); p.obj = новый (p.buffer) T (станд :: вперед (арг) ...); p.counter = новый (p.buffer + SizeOf (Т)) без знака Int (1); вернуться р; } ~ SharedPointer () {* counter--; если (* счетчик == 0) {obj-> ~ Т (); удалить буфер; }}} знаю, как она должна быть интегрирована здесь. Обновление: Как указано в комментариях, станд :: aligned_storage может быть использован. Будет ли это возможное решение, то: шаблон класса SharedPointer {структура хранения {станд :: aligned_storage_t OBJ; беззнаковое целочисленное значение счетчика; }; Хранение * буфер; Т * OBJ; без знака INT * счетчика; Шаблон статического SharedPointer делают (Args && ... арг) {SharedPointer р; p.buffer = новый хранения (); p.obj = новый (p.buffer) T (станд :: вперед (арг) ...); p.counter = новый (p.buffer + SizeOf (Т)) без знака Int (1); вернуться р; } ~ SharedPointer () {* counter--; если (* счетчик == 0) {obj-> ~ Т (); удалить буфер; }}} знаю, как она должна быть интегрирована здесь. Обновление: Как указано в комментариях, станд :: aligned_storage может быть использован. Будет ли это возможное решение, то: шаблон класса SharedPointer {структура хранения {станд :: aligned_storage_t OBJ; беззнаковое целочисленное значение счетчика; }; Хранение * буфер; Т * OBJ; без знака INT * счетчика; Шаблон статического SharedPointer делают (Args && ... арг) {SharedPointer р; p.buffer = новый хранения (); p.obj = новый (p.buffer) T (станд :: вперед (арг) ...); p.counter = новый (p.buffer + SizeOf (Т)) без знака Int (1); вернуться р; } ~ SharedPointer () {* counter--; если (* счетчик == 0) {obj-> ~ Т (); удалить буфер; }}} шаблонный класс SharedPointer {структура хранения {станд :: aligned_storage_t OBJ; беззнаковое целочисленное значение счетчика; }; Хранение * буфер; Т * OBJ; без знака INT * счетчика; Шаблон статического SharedPointer делают (Args && ... арг) {SharedPointer р; p.buffer = новый хранения (); p.obj = новый (p.buffer) T (станд :: вперед (арг) ...); p.counter = новый (p.buffer + SizeOf (Т)) без знака Int (1); вернуться р; } ~ SharedPointer () {* counter--; если (* счетчик == 0) {obj-> ~ Т (); удалить буфер; }}} шаблонный класс SharedPointer {структура хранения {станд :: aligned_storage_t OBJ; беззнаковое целочисленное значение счетчика; }; Хранение * буфер; Т * OBJ; без знака INT * счетчика; Шаблон статического SharedPointer делают (Args && ... арг) {SharedPointer р; p.buffer = новый хранения (); p.obj = новый (p.buffer) T (станд :: вперед (арг) ...); p.counter = новый (p.buffer + SizeOf (Т)) без знака Int (1); вернуться р; } ~ SharedPointer () {* counter--; если (* счетчик == 0) {obj-> ~ Т (); удалить буфер; }}} Буфер + SizeOf (Т)) без знака Int (1); вернуться р; } ~ SharedPointer () {* counter--; если (* счетчик == 0) {obj-> ~ Т (); удалить буфер; }}} Буфер + SizeOf (Т)) без знака Int (1); вернуться р; } ~ SharedPointer () {* counter--; если (* счетчик == 0) {obj-> ~ Т (); удалить буфер; }}}
csk
1

голосов
2

ответ
310

Просмотры

как написать ++ член класса функцию обертку C?

Я хочу, чтобы обернуть несколько функций-членов класса и сделать некоторые приготовления и очистки работы вокруг них. Я стараюсь, чтобы скопировать другой код пула потоков, но и получать некоторые ошибки я не могу иметь дело вне. Как правильно это сделать? # include # include с помощью патезраса; класс А {общественности: недействительным подключения () {}; недействительные близко () {}; Шаблон автоматической обертка (F && F, Args && ...) - Args> имяТип станда :: result_of :: типа {используя return_type = имяТип станд :: result_of :: типа; подключения (); return_type RET = F (арг ...); близко(); вернуться в отставке; } BOOL с (Int А, строка б) {} Строка с (строка б) {возвращение Ь;} BOOL R (Int А, строка б) {}}; INT основных () {А а; a.connect (); переменный ток (1, "ABC"); близкий(); // равна a.wrapper (ас, 1, "ABC"); но compling ошибка, как правильно писать? соиЬ
Liu Weibo
1

голосов
0

ответ
82

Просмотры

Преобразование VARIADIC шаблон VARIADIC функции

Учитывая следующий случай: #include класс перечисления событий {None, изменение размера, / * Некоторые другие события * /}; шаблон структура валидатор; Шаблон с использованием eventor = имяТип валидатора :: типа; Шаблон валидатор структура {используя тип = пустоту (*) (без знака Int, беззнаковое целое); }; My_Event структура {беззнаковое размер INT; недействительный ** funcs; Const Event & m_ev; My_Event (Const Событие & эв, недействительный (* е) (...)): m_ev (эв), размер (1), funcs (новый недействительный * [размер]) {* funcs = F; } Недействительным рег (недействительным (* е) (...)); }; EventHolder структура {беззнаковое размер INT; My_Event ** события; EventHolder (): размер (0), события ((My_Event **) таНос (размер)) {} аннулируются добавить (Const Event & эв, аннулируются (* е) (...)) {My_Event ** eventDump = (My_Event * *) (таНос (площадь + 1)); тетср (eventDump, событие, размер); * (EventDump + размер) = новый My_Event (эв, е); бесплатно (события); события = eventDump; }}; EventRegistry структура {держатель EventHolder; аннулированию registerEvent (событие && эв, аннулируются (* е) (...)) {holder.add (эв, е); } } События; Шаблон registerEvent недействительным (eventor е) {events.registerEvent (тип, е); } Недействительным обратного вызова (без знака ширины INT, беззнаковое целочисленное значение высоты) {} Int основной () {registerEvent (обратный вызов); } Что это ошибка вида метания: "пустота foo1 (SomeEnum &&, недействительный (__cdecl *) (...)): не может преобразовать аргумент 2 из 'пустот (__cdecl *) (неподписанные Int, неподписанные Int)' к«недействительному (__cdecl *) (...) (Главное здесь регистрирующее событие, как показано в основном, и имеющее множество My_Event в EventHolder) Если я глобальная функция registerEvent в VARIADIC функцию, это заставит все обратные вызовы ве VARIADIC, который это не то, что я м ищет Если я registerEvent EventRegistry это VARIADIC шаблон, давайте говорить шаблон registerEvent (Event && эв недействительным (* е) (арг ...)); Затем добавить EventHolder должны также принимать VARIADIC шаблоны, которая превратит его в: шаблон добавить (Const Event & эв, аннулируются (* е) (арг ...)); Как добавить EventHolder в вызывает новый My_Event (еи, е), то конструктор My_Event должен также быть VARIADIC. В том, что конструктор хранит сохраняет функции в массиве локально, вся структура My_Event должна быть VARIADIC 1, но если вся структура является VARIADIC, то я не могу сохранить его в массиве EventHolder (в хранении базового класса не будет работать, как все методы, используемые в My_Event будет зависеть от шаблона тоже. 1 Когда сочинительство это, я понял, что это утверждение неверно (спасибо @Igor комментария). Я сохранил все функции в My_Event так же, как недействительные указатели, и сделал все функции-членов, которые получили доступ к списку (в том числе конструктора) шаблонов переменного числа. После этого, я мог бы сделать все другие функции, VARIADIC шаблоны и составлен этот вопрос решается. Не могу принять ответ Игоря, как это комментарий, не знаю, как отметить этот вопрос решен или закрыть
Juan
1

голосов
0

ответ
732

Просмотры

Отключение C ++ 11 в Qt Creator

Как отключить C ++ 11/14 в Qt Creator? Я хотел бы, чтобы скомпилировать мой проект в C ++ 98/03 код. По умолчанию он побежал GCC так: г ++ ... -std = гну ++ 11 -Wextra ... Я редактировал * .pro файл, чтобы он содержит следующее: ... CONFIG - = C ++ 11 CONFIG + = нет не -c ++ 11 не-C ++ 14 QMAKE_CXXFLAGS + = -std = C ++ 98 -pedantic ... строка компилятор стал таким: G ++ ... -std = C ++ 98 -pedantic -g -std = гну ++ 11 ... Она до сих пор компиляции в C ++ 11. Как я могу отключить поддержку C ++ 11? Составитель: MinGW 5.3.0 Qt: 5.9.0 QtCreator: 4.4.1 Спасибо за любую помощь!
Konstantin T.
1

голосов
0

ответ
121

Просмотры

Связывание программы для библиотек использовать разные _GLIBCXX_USE_CXX11_ABI каждый

Я пытаюсь скомпилировать программу (с помощью GCC 5.4.O), которая зависит от двух библиотек. Библиотека А была составлена ​​с использованием старого ABI, а библиотека B была составлена ​​с использованием нового C ++ 11 ABI (см Dual ABI). Если скомпилировать параметр _GLIBCXX_USE_CXX11_ABI 1 программу, у меня есть связь ошибок с библиотекой А. Если установить его в 0, я связь ошибок с библиотекой В. Можно ли поручить компилятор для компиляции вызовов на одну библиотеку, используя одно значение _GLIBCXX_USE_CXX11_ABI и звонки в другую библиотеку, используя другое значение _GLIBCXX_USE_CXX11_ABI? Если я правильно понял, то это возможно при составлении новой библиотеки, которая зависит от двух других, но я не знаю, если то же самое верно и для программы.
toliveira
1

голосов
0

ответ
77

Просмотры

C ++ странно использование нового ключевого слова [дубликат]

Этот вопрос уже есть ответ здесь: Что использует там для «размещения нового»? 22 ответов Что такое на месте конструктора в C ++? [Дублировать] 6 ответов я пытался узнать что-то еще, то я столкнуться со следующим кодом. Точка класс {}; указать р-; новый (& р-) точка (w.p_); Что выражение третьей линии делать, и что предназначено? Имеет ли это помогает нам экономить время при копировании или что-то. И это как-то Р- выделяется динамически? // Я весьма озадачен. Место я столкнулся - >> http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2544.pdf // Вторая страница документа.
TuttyFruty
1

голосов
1

ответ
177

Просмотры

Installing ceres-solver on iOS

работает CMake -DCMAKE_TOOLCHAIN_FILE = Ceres-решатель / CMake / iOS.cmake -DCMAKE_CXX_FLAGS = "- STDLIB = Libc ++" -DEIGEN_INCLUDE_DIR = / USR / местные / Погреб / собственное -DIOS_PLATFORM = OS Ceres-решатель дает мне эти ошибки - Использование минимального GLog запасной (включают): внутренний / Ceres / miniglog - уровень журнала Max для минимального GLog замены: 2 - здание без OpenMP, отключение. - Ни OpenMP или Т включены, отключение многопоточности. - Глядя на C ++ включают unordered_map CMake Ошибка: Генератор: выполнение макияжа не удалось. Сделать командой была: "CMAKE_MAKE_PROGRAM" "cmTC_3feba / быстрым" - Глядя на C ++ включает unordered_map - не найдено - Глядя на C ++ включает TR1 / unordered_map CMake Ошибки: Генератор: выполнение макияжа не удалось. Сделать команда была: «CMAKE_MAKE_PROGRAM» «cmTC_36cb7 / быстро» - Глядя на C ++ включают tr1 / unordered_map - не найден - не удается найти или. - Замена unordered_map / комплект с картой / набор (предупреждение: медленнее), попробуйте включить опцию CXX11, если вы ожидаете, C ++ 11 будет доступен. - Глядя на C ++ включает в себя память CMake Ошибки: Генератор: выполнение макияжа не удалось. Сделать команда была: «CMAKE_MAKE_PROGRAM» «cmTC_013b8 / быстрый» - Глядя на C ++ включают в себя память - не найден - Глядя на C ++ включает TR1 / память CMake Ошибка: Генератор: выполнение макияжа не удалось. Сделать команда была: «CMAKE_MAKE_PROGRAM» «cmTC_bb377 / быстрый» - Глядя на C ++ включает TR1 / память - не нашла CMake Ошибка при CMakeLists.txt: 494 (сообщение): Не удается найти shared_ptr, попробуйте включить опцию CXX11, если вы ожидаете, C + +11 будет доступен. даже если я установить CXX11, я хотел бы получить ту же ошибку. Что я должен делать? Предполагая, что я получаю эту работу, я просто запустить сделать установку, чтобы получить файл libceres.a? Большая помощь оценила.
Wy th
1

голосов
1

ответ
62

Просмотры

Как использовать перечисление, объявленное в классе в шаблоне BASE в том же самом классе

Извините за многословный / вопрос слишком длинным, но я не знаю, как еще слова этого. У меня есть класс. Этот класс расширяет базовый класс, который шаблонный. Я хочу использовать перечисление, объявленные в производном классе в качестве одного из аргументов шаблона. Не значение от него, фактического перечисления, хотя я сомневаюсь, что это делает разницу. Если я пытаюсь сделать это, я получаю сообщение об ошибке необъявленную идентификатором C2065, например, в этом упрощенном примере. Шаблон класса Base {общественности: Значение Foo; } Класс Derived: открытая база {перечислений Цвет {синяя, красный,}} Я пытался смотреть вокруг, и обнаружил, что перечисления не вперед, если они объявление внутри класса, так что я не знаю, что делать. Похоже, что довольно большой надзоре, чтобы оставить такой случай использования неподдерживаемый, так есть ли способ сделать это? В моем реальном коде, я
ProgramGamer
1

голосов
0

ответ
29

Просмотры

c++ segmentation error using a string variable

I uploaded whole code because i cannot pinpoint the exact location of segmentation error since the segmentation error is a vague error #include #include #include #include #include using namespace std; bool newl=false; string censormode (string line){ int len=line.length(); int end; string word; for(int i=0;iend;x--){ word.pop_back(); } while(!isspace(line[i])){ i++; } end=i; while(isspace(line[i])){ i++; } i--; } } return word; } string squishmode (string word,int j){ if(j==0){ return word; } else{ return " "+word; } } int main(int argc, char * argv[]) { map flagC={{"-q",false},{"-c",false},{"-l",false},{"-s",false},{"-p",false}}; int counter=0; ifstream inF; string lines; for (int i=1;i
jeff wright
1

голосов
0

ответ
45

Просмотры

Использование вставки рода, чтобы переместить все строки из динамического массива 2D

Это мой первый раз, задавая вопрос о StackOverflow. Я хотел бы получить некоторую помощь со вставкой рода динамического 2D массива. В частности, мне нужно все строки должны быть перемещены при сортировке, а не только отдельные элементы. Я получил близко, но так, как у меня сейчас, кажется, сделать первый шаг или два, а затем просто бросить курить. Ниже то, что я сделал с помощью функции до сих пор, и тест я бегу его, а также то, что на выходе функции должно быть, если это правильно. аннулированию сортировка вставками (строка ** обр, строка SortKey, Int строка, столбец INT) {для (INT = 1; г <строка; я ++) {Int J = I-1; строка * ключ = обр [я]; для (INT = 0; к <Col; K ++) (! обр [я] [к] .find (SortKey) = -1) {если {в то время как (J> = 0 && обр [J] [K]> обр [я] [K]) {обр [J + 1] = обр [J]; j--; }} Обр [J + 1] = ключа; }}} Входные данные: (элементы разделены пробелами) ID: 1234567 первая: Мери Последнее: Зеленый DOB: 1996-10-03 балл: 4.0 ID: 1234568 первый: Питер последнее: Белый DOB: 1997-05-22 балл: 3.8 ID : 1654238 первый: Ник последний: Парк DOB: 1995-08-18 GPA: 4.0 ID: 1234587 первый: Katy последний: Зеленый DOB: 1995-08-18 GPA: 4,0 Желаемая Выход: (при сортировке по имени, которое является то, что пары SortKey трюмы) ID: 1234587 первый: Katy последний: Зеленый DOB: 1995-08-18 GPA: 4.0 ID: 1234567 первый: Мэри последний: Зеленый DOB: 1996-10-03 GPA: 4.0 ID: 1654238 первые: Ник последний: Парк DOB: 1995-08-18 GPA: 4.0 ID: 1234568 первый: Питер последний: Белый DOB: 1997-05-22 GPA: 3,8 Выходной ток: ID: 1234567 первый: Мэри последний: Зеленый DOB: 1996-10-03 GPA : 4,0 ID: 1654238 первый: Ник в прошлом: Парк DOB: 1995-08-18 GPA: 4.0 ID: 1234587 первый: Katy последний: Зеленый DOB: 1995-08-18 GPA: 4.0 ID: 1234568 первый: Питер последний: Белый DOB: 1997-05-22 GPA : 3,8 Как вы можете видеть, некоторые сортировки определенно сделали. Он просто не закончить до того, как бросить курить. Если бы это было что-то вроде пузыря или выбора рода, где я мог бы просто положить в функции подкачки, это было бы хорошо. Но получить эту работу для вставки дает мне неприятность. Существуют ли какие-либо логические ошибки или недостающие биты из моего кода, которые могли бы помочь мне разобраться в этом остальную часть пути? Любая помощь и советы очень признателен! Если бы это было что-то вроде пузыря или выбора рода, где я мог бы просто положить в функции подкачки, это было бы хорошо. Но получить эту работу для вставки дает мне неприятность. Существуют ли какие-либо логические ошибки или недостающие биты из моего кода, которые могли бы помочь мне разобраться в этом остальную часть пути? Любая помощь и советы очень признателен! Если бы это было что-то вроде пузыря или выбора рода, где я мог бы просто положить в функции подкачки, это было бы хорошо. Но получить эту работу для вставки дает мне неприятность. Существуют ли какие-либо логические ошибки или недостающие биты из моего кода, которые могли бы помочь мне разобраться в этом остальную часть пути? Любая помощь и советы очень признателен!
chall18
1

голосов
1

ответ
39

Просмотры

Перегрузки Оператор + с двумя массивами C ++

DynamicArray DynamicArray :: Оператор + (Const DynamicArray & RHS) сопзЬ {INT кол = 0; INT tempCapcacity = mCapacity; INT newCapacity = mCapacity + rhs.mCapacity; Строка * Темп = allocateAndCopyToNewArray (Мслов, mNumWords, newCapacity); для (INT I = tempCapcacity; я <newCapacity; я ++) {темп [I] = rhs.mWords [число]; подсчитывать ++; } Вернуть * это; } Попытка иметь перегруженный оператор объединить два массива строк. Функция должна быть константной, так что я не в состоянии изменить данные членов. Как я могу вернуть этот временный массив?
Aidan Smith
1

голосов
1

ответ
107

Просмотры

C ++ Дайте ошибку компилятора для установки (статический) константный глобальную переменную в другой статической константной переменной

Возможно ли лязг дать ошибку компиляции, если вы случайно установили константный глобальную переменную в другой статической константной переменной в C ++ (в различных единицах трансляции). Поскольку поведение в значительной степени неопределенным, было бы очень полезно, чтобы обнаружить, если сделать это случайно. EDIT: Мой вопрос отличается от связанного выше, так что я ищу сообщение предупреждения / ошибки компилятора, чтобы заставить меня не назначать статического глобальную переменную в другой статической переменной. Я в принципе хочу быть принужден компилятором, чтобы избежать всего фиаско. Я интересно, если это возможно.
keyboard
1

голосов
1

ответ
39

Просмотры

Как я могу реализовать несколько разделителей при разделении строки в вектор?

Мой профессор нуждается в нас, чтобы разбить строку с игнорируя знаки препинания, так что «Здравствуйте, меня зовут Джек!» разделится без запятой и восклицательного точки. В частности, мы должны отбросить запятые, вопросительные знаки, восклицательные знаки, и двоеточие запятой. Приведенный ниже код работает, но только разделителем является пробел. Как добавить разделители с тем, что у меня есть? Вызов функции: разметить (код, '', маркеры); Функция, которая разбивает строку и сохраняет его в вектор: пустота токенизировать (Const строки & Str, символ DELIM, вектор & жетоны) {INT tokenStart = 0; INT delimPos = str.find (DELIM); в то время как (! delimPos = строка :: НСС) {строка Tok = str.substr (tokenStart, delimPos - tokenStart); tokens.push_back (Tok); delimPos ++; tokenStart = delimPos; delimPos = ул. найти (DELIM, delimPos); если (delimPos == строка :: НСС) {строка = Tok str.substr (tokenStart, delimPos - tokenStart); tokens.push_back (Tok); }}}
Tristan
1

голосов
1

ответ
240

Просмотры

CMake, как удалить / USR / Lib пути по умолчанию при компоновке разделяемых библиотек?

Это выходной ток от otool -L libtarget.dylib libA.dylib libB.dylib /usr/lib/libc++.1.dylib (совместимость версии 1.0.0, текущая версия 307.5.0) /usr/lib/libSystem.B .dylib (совместимость версии 1.0.0, текущая версия 1238.60.2) Я был в состоянии удалить Libc ++. dylib зависимость, но я не могу понять, как удалить libSystem.dylib. Есть ли способ, чтобы удалить / USR / Lib пути по умолчанию при связывании разделяемой библиотеки в CMake?
Alpha234
1

голосов
0

ответ
90

Просмотры

Ошибка при запуске нить с CreateThread [дублированный]

Этот вопрос уже есть ответ здесь: несовместимые типы при создании нити в ошибках преобразования 1 ответа Windows, в CreateThread 1 ответ Я пытаюсь создать планировщик, и при создании потока, он дает следующее сообщение об ошибке: аргумент типа «DWORD (* ) (LPVOID lpParameter)»несовместима с параметром типа "LPTHREAD_START_ROUTINE". Я сделал функцию нити статическим, как предложено в других вопросах, и она по-прежнему дает ту же ошибку. Любое решение или указатели будут оценены. Это соответствующая часть моего кода: #include «stdafx.h» #include #include #include #include #include с помощью патезраса; Процесс структура {INT ПИД = 0; INT burstTime; INT ArrivalTime; ИНТ приоритет; }; вектор allProcesses; Процесс myProcess; вектор ручка; вектор; двойные слова Статическая DWORD MyThread (LPVOID lpParameter) {// выполнить мою нить} аннулируются newArrival () {DWORD tempThreadID; dwords.push_back (tempThreadID); //// ошибка происходит здесь в MyThread handles.push_back (CreateThread (0, 0, MyThread, & allProcesses [0], 0, & DWORDs [dwords.size () - 1])); // сделать еще больше вещей} пустот планировщик () {// сделать некоторые другие вещи newArrival (); // делать больше вещей} ИНТ основной () {// сделать некоторые вещи myProcess.arrivalTime = 1000; myProcess.burstTime = 2500; myProcess.priority = 90; allProcesses = {myProcess}; Планировщик потоков (планировщик); Система ( "PAUSE> нулевой"); возвращать 0; } Статическая DWORD MyThread (LPVOID lpParameter) {// выполнить мою нить} аннулируются newArrival () {DWORD tempThreadID; dwords.push_back (tempThreadID); //// ошибка происходит здесь в MyThread handles.push_back (CreateThread (0, 0, MyThread, & allProcesses [0], 0, & DWORDs [dwords.size () - 1])); // сделать еще больше вещей} пустот планировщик () {// сделать некоторые другие вещи newArrival (); // делать больше вещей} ИНТ основной () {// сделать некоторые вещи myProcess.arrivalTime = 1000; myProcess.burstTime = 2500; myProcess.priority = 90; allProcesses = {myProcess}; Планировщик потоков (планировщик); Система ( "PAUSE> нулевой"); возвращать 0; } Статическая DWORD MyThread (LPVOID lpParameter) {// выполнить мою нить} аннулируются newArrival () {DWORD tempThreadID; dwords.push_back (tempThreadID); //// ошибка происходит здесь в MyThread handles.push_back (CreateThread (0, 0, MyThread, & allProcesses [0], 0, & DWORDs [dwords.size () - 1])); // сделать еще больше вещей} пустот планировщик () {// сделать некоторые другие вещи newArrival (); // делать больше вещей} ИНТ основной () {// сделать некоторые вещи myProcess.arrivalTime = 1000; myProcess.burstTime = 2500; myProcess.priority = 90; allProcesses = {myProcess}; Планировщик потоков (планировщик); Система ( "PAUSE> нулевой"); возвращать 0; } allProcesses [0], 0, & [dwords.size двойных слов () - 1])); // сделать еще больше вещей} пустот планировщик () {// сделать некоторые другие вещи newArrival (); // делать больше вещей} ИНТ основной () {// сделать некоторые вещи myProcess.arrivalTime = 1000; myProcess.burstTime = 2500; myProcess.priority = 90; allProcesses = {myProcess}; Планировщик потоков (планировщик); Система ( "PAUSE> нулевой"); возвращать 0; } allProcesses [0], 0, & [dwords.size двойных слов () - 1])); // сделать еще больше вещей} пустот планировщик () {// сделать некоторые другие вещи newArrival (); // делать больше вещей} ИНТ основной () {// сделать некоторые вещи myProcess.arrivalTime = 1000; myProcess.burstTime = 2500; myProcess.priority = 90; allProcesses = {myProcess}; Планировщик потоков (планировщик); Система ( "PAUSE> нулевой"); возвращать 0; }
ankit
4

голосов
4

ответ
216

Просмотры

Why does std::future::wait_for not wait for the correct duration?

Я не понимаю, почему расхождение между измеренным и заданными длительностями при вызове зОго :: будущего :: wait_for увеличивается, когда заданное увеличение продолжительности. Когда я говорю зЬй :: будущего ждать 10ns и измерить истекшее время я получаю ~ 2000ns. Теперь 10ns очень короткий срок, так что, может быть, есть слишком много накладные расходы, связанные с соответствующей функцией вызовов ждать этот короткий промежуток времени. Но когда я говорю зЬй :: будущего ждать 100000ns и измерить истекшее время я получаю ~ 150000ns. Аналогичный эффект можно увидеть при ожидании 10 и 100 микросекунд, соответственно. #include #include #include #include с помощью патезрасе :: хронографа; используя патезрас :: chrono_literals; недействительными F () {станд :: this_thread :: sleep_for (1s); } INT основных () {steady_clock :: начало time_point, конец; станд :: будущее будущее = станд :: асинхронной (станд :: запуск :: асинхронный, е); Start = steady_clock :: теперь (); future.wait_for (10ns); конец = steady_clock :: сейчас (); станд :: соиЬ
red
1

голосов
1

ответ
45

Просмотры

Добавление 2 векторов компоненты с компонентом с использованием стеки

У меня есть проблемы с моим кодом C ++. Мне нужно, чтобы сумма компонентов векторов по компонентам. Например, если у меня есть (2,1) и В (3,3) результат должен быть (5,4). Я пытался что-то сделать, но, видимо, у меня есть проблема, и я не знаю, что делать. Ошибка не является: ,, Ни один член называется толчок в станд :: _ 1vector»Мой код: #include #include "stack_base.h" #include с помощью патезрасе, шаблонный класс App {общественности: Stack * стек; App (Stack и стек) {этом-> стек = & стек;} Т сумма () {стек * tempStack = стек; Т сумма = 0; INT размер = Пакетирование> getTopLevel (), для (INT I = 0; ipeek (); tempStack-> поп ();} сумма возврата;} Т вычесть () {Стек tempStack = * стек; Т зиЬзЬг = 0; для (INT I = 0; igetTopLevel (); я ++) {substr- = tempStack.peek (); tempStack.pop (); } Вернуть SUBSTR; }}; недействительным дисплей (вектор & v) {для (INT I = 0; г <V.SIZE (); я ++) {соиЬ
Robinson Chera
1

голосов
2

ответ
363

Просмотры

ЭЛТ не обнаруживает утечку памяти в DLL

Я разработал приложение, которое состоит из основного исполняемого файла и динамической библиотеки (DLL). Оба из них разработаны мною и строить с тем же компилятором (FYI: оба содержатся в одном решении VS) на Windows 10 Pro. Когда я хочу, чтобы проверить исполняемый файл и библиотеку на наличие утечек памяти с библиотекой MS CRT. Я могу обнаружить утечку памяти в исполняемом файле, но не в динамической библиотеке (я намеренно просочиться в обоихах с одним неудалённым целым числом). Исполняемые построен с MDD и библиотека построена с МПД. Я также пытался строить исполняемый файл с MTD без успеха. (Библиотека из-за его зависимостей должны быть построены с МТ (г)). Также, пожалуйста, заметьте, я не имею в виду, что у меня есть меньшие отчеты утечек памяти (например, без имен файлов и строк), я имею в виду не существует никаких сообщений для библиотеки DLL, когда должен быть по крайней мере один.
1

голосов
1

ответ
68

Просмотры

Доля C ++ экземпляры объектов с QML

У меня есть логический BUSSINES в C ++ 11 и мне нужно, чтобы разоблачить и ПОДЕЛИТЬСЯ некоторые C ++ QObjetcts с QML UI. Я использую поддельный-синглтон подход подвергать эти объекты с лямбда и статической переменной: статическая имя_класса * static_pointer = & non_singleton_QObject_instance; qmlRegisterSingletonType ( "ИмяКласс", 1, 0, "ИмяКласс", [] (QQmlEngine * двигатель, QJSEngine * ScriptEngine) -> QObject * {Q_UNUSED (двигатель) Q_UNUSED (ScriptEngine) возвращение static_pointer;}); работает нормально, но при выходе из приложения я получаю ошибки, так как объекты C ++ уничтожаются QGuiApplication перед тем QQmlApplicationEngine деструктора. Когда QQmlApplicationEngine пытается получить доступ к этим объектам поддельных одноэлементным в его деструкторе, я получаю аварию. Я могу решить это skiping QQmlApplicationEngine с выходом (0) вызов, но я
M.A. Pons
1

голосов
1

ответ
91

Просмотры

GCC C ++ 11/14 и РВО в обратном заявлении со скобками

Я наблюдая ситуацию, когда в зависимости от -std = C ++ 11 или -std = C ++ 14 / 1Z флаги GCC (как 5,4 и 7,3), либо (мое понимание) применяется РВО или не в том случае, когда есть круглые скобки вокруг выражения возвращения заявления. лязг, кажется, излучают тот же код, который использует РВО в обоих случаях. Пожалуйста, рассмотрим следующее: #include класс C {общественности: C () {зЬй :: COUT
lapk
1

голосов
0

ответ
53

Просмотры

Как скомпилировать тяжелые проекты шаблона в Cygwin64 без .о: Файл слишком большой ошибке

Это не новая проблема, но я не решить с указанием этих шагов. У меня есть тяжелый C ++ шаблон для создания в cygwin64 среде, НКУ команда: / USR / местные / бен / ССАГПЗ -std = C ++ 11 -DPACKAGE_VERSION = \ "1,7 \" -DPACKAGE_STRING = \ "\ 1,7 \" -DPACKAGE_BUGREPORT = \ "[email protected] \" -DPACKAGE_URL = \ "\" -DPACKAGE = \ "Lib \" -DVERSION = \ "1.7 \" -DNDEBUG = 1 -DBOOST_UBLAS_NDEBUG = 1 -DSTDC_HEADERS = 1 = -DHAVE_SYS_TYPES_H 1 -DHAVE_SYS_STAT_H = 1 -DHAVE_STDLIB_H = 1 -DHAVE_STRING_H = 1 -DHAVE_MEMORY_H = 1 -DHAVE_STRINGS_H = 1 -DHAVE_INTTYPES_H = 1 -DHAVE_STDINT_H = 1 -DHAVE_UNISTD_H = 1 -DHAVE__BOOL = 1 -DHAVE_STDBOOL_H = 1 -I. -Я../.. о] Ошибка 1 Я попытался следующие методами в соответствии с гуглом искал: 1> Изменение компиляции флага из «-O2» к «-OG -Os» 2> Изменение компиляции флага из «-O2» до «-O3» 3 > Изменение компиляции флаг из «-O2» к «-О» 4> Изменение компилятор из «GCC» до «лязг» (версия 5.0) 5> Добавить опцию «-Wa, -mbig-OBJ» явно открыт большой OBJ Тем не менее, ни один из вышеперечисленной методы не работает для меня. Есть ли способ, чтобы передать сборник? Спасибо большое!
Changjian YU
1

голосов
1

ответ
47

Просмотры

looking for maps techniques

Here's the code i have working on.it gets the word count from a string but now i have been trying to apply the same logic using maps but couldn't do so since maps can't take key value at run time.how can i store each word in a key from a string in a different keys each time so that i can get actual word count .Any idea how can i do that ? #include #include #include using namespace std; int main() { map stringCounts; map::iterator iter; string words; int TOTAL = 0; char a[1000]; cout = 65 && int(a[i]) = 97 && int(a[i])
zeeshan majeed
1

голосов
0

ответ
54

Просмотры

прохождение ошибки подталкивание :: вариант производный класс

Почему экземпляр копирования Foo генерирует ошибку: ошибка: вызов перегруженной «convert_construct (Foo &, долго Int)» неоднозначен? #include #include #include структура Foo: общественное подталкивание :: вариант {использование наддува :: вариант :: варианта; }; INT основных () {Foo F (111); // автоматически G = F; // ОШИБКА -> Вызов перегруженного 'convert_construct (Foo &, долго Int)' неоднозначен} Живой пример: cpp.sh/7f3xy
Michal Wegorek
1

голосов
1

ответ
58

Просмотры

unordered_map вставка создает узкое место

Так вот я пытаюсь создать структуру данных Graph, в котором я должен следить за кромки в соответствии с их идентификаторами. Поэтому я создаю края идентификаторы в структуре данных строки как Ид: sourceid_destinationid с использованием патезраса; Класс края {общественности: BOOL оператор == (Const Гурт * & OBJ) сопзЬ {возвращение Ид == obj-> Ид; } Станд :: строка Ид; набор rrids; INT SourceId; INT destid; ИНТ силы; общественности: Край (станд :: строка Ид, внутр из, внутр к); станд :: строка GetId (); аннулированию addRRid (INT rrid); аннулированию removeRRid (INT rrid); недействительная setRRid (набор rrids); недействительный SETID (станд :: строка Ид); }; Это еще один класс, который я использую для добавления и удаления ребер. HPP-файл, используя патезрас; класс RRassociatedGraph {общественности: unordered_map vertexMap; станд :: unordered_map EdgeMap; ИНТ noOfEdges; общественности: RRassociatedGraph (); unordered_set getVertices (); Int getNumberOfVertices (); недействительный AddVertex (вершина v); вершина * находка (интермедиат идентификатор); Край * findedge (станд :: строка ID); аннулированию addEdge (Int, Int от к, внутр метки); аннулированию removeEdge (Int из, Int к, Int rrSetID); }; Когда я отлаживаюсь код, я обнаружил, что в функции добавить край здесь место, где я делаю EdgeMap.insert исполнение не идет к следующей строке. Он остается в хэш-таблице для цикла некоторого входа ведра. Я не могу отладить этот код часто, потому что я должен ждать в течение 3 часов, чтобы получить эту проблему. Код прекрасно работает с небольшими графиками. Но для больших графов, где edgeMap должен хранить 800K края. Он идет в этом хэш-бесконечном цикле. Я не получаю этот код хеш. Но есть что-то не так с моей структурой данных создания Edgemap? # include "RRassociatedGraph.hpp" RRassociatedGraph :: RRassociatedGraph () {noOfEdges = 0; } Недействительного RRassociatedGraph :: AddVertex (вершина v) {vertexMap.insert (пара (v.getId (), & v)); } Вершина * RRassociatedGraph :: найти (интермедиат идентификатор) {unordered_map :: const_iterator получил = vertexMap.find (ID); если (! есть = vertexMap.end ()) возвращают got-> второй; вернуться nullptr; } Край * RRassociatedGraph :: findedge (станд :: строка ID) {unordered_map :: const_iterator получил = EdgeMap.find (ID); если (! есть = EdgeMap.end ()) возвращают got-> второй; вернуться nullptr; } Аннулируются RRassociatedGraph :: addEdge (интермедиат из, внутр к, внутр метки) {вершина * fromVertex = находка (с); если (fromVertex == nullptr) {fromVertex = новая вершина (от); vertexMap. вставки (пара (fromVertex-> GetId (), fromVertex)); } Вершина * toVertex = находка (к); если (toVertex == nullptr) {toVertex = новая вершина (к); vertexMap.insert (пара (toVertex-> GetId (), toVertex)); } Если (fromVertex == toVertex) {// fromVertex-> полустепень ++; // coutsecond; если (fromVertex-> removeOutgoingEdge (е, rrSetID)) {EdgeMap.erase (Ид); удалить е; }}} Это место, где он продолжает идти в этот цикл. Время вставки карты должно быть очень меньше, но это создает узкое место в моем коде. Шаблон недействительным __hash_table :: __ пережевывание (size_type __nbc) {#if _LIBCPP_DEBUG_LEVEL> = 2 __get_db () -> __ invalidate_all (этого); #endif // _LIBCPP_DEBUG_LEVEL> = 2 __pointer_allocator & __npa = __bucket_list_.get_deleter () .__ Alloc (); __bucket_list_.reset (__ NBC> 0 __pointer_alloc_traits :: выделить (__ NPA, __nbc): nullptr); . __Bucket_list_.get_deleter () размер () = __nbc; если (__nbc> 0) {для (size_type __i = 0; __i <__nbc; ++ __ я) __bucket_list _ [__ I] = nullptr; __next_pointer __pp = __p1_.first () .__ PTR (); __next_pointer __cp = __pp -> __ next_; если (__cp = nullptr!) {size_type __chash = __constrain_hash (__ ф -> __ хэш (), __nbc); __bucket_list _ [__ chash] = __pp; size_type __phash = __chash; для (__pp = __cp, __cp = __cp -> __ next_; __cp = nullptr;! __cp = __pp -> __ next_) {__chash = __constrain_hash (__ ф -> __ хэш (), __nbc); если (__chash == __phash) __pp = __cp; еще {если (__bucket_list _ [__ chash] == nullptr) {__bucket_list _ [__ chash] = __pp; __pp = __cp; __phash = __chash; } Еще {__next_pointer __np = __cp; для (; __np -> __ next_ = nullptr && key_eq () (__ ф -> __ вентиляционный () -> __ value_, __np -> __ следующая _-> __ вентиляционной шахты () -> __ value_)! __np = __np -> __ next_); __pp -> __ next_ = __np -> __ next_; __np -> __ next_ = __bucket_list _ [__ chash] -> __ next_; __bucket_list _ [__ chash] -> __ next_ = __cp; }}}}}} У меня есть много файлов, так что я не могу поставить весь код. Я не то, что хорошо в C ++. Пожалуйста, дайте мне знать, если я должен реализовать его другим способом. Я должен использовать HashMap, потому что я также нужен более быстрый поиск.
Preeti Bhardwaj
1

голосов
1

ответ
143

Просмотры

что использование «хэш» отмечен в flatbuffers поле схемы?

Я использую flatbuffers в своей схеме, некоторые поля можно задать в виде хэша. Например: таблица Person {возраст: INT (хэш: "fnv1_32"); } для чего это ? Я использую flatc --cpp --gen объектно-Апи Person_KeyHashTest.fbs Как установить «перепев» и «распознаватель» в функции генерации? Может кто-нибудь дать мне простой пример?
NeoLiu
1

голосов
1

ответ
40

Просмотры

Расчет максимальной суммы возможной из заданных ограничений

So, I found this question on topcoder: Your friend Lucas gave you a sequence S of positive integers. For a while, you two played a simple game with S: Lucas would pick a number, and you had to select some elements of S such that the sum of all numbers you selected is the number chosen by Lucas. For example, if S={2,1,2,7} and Lucas chose the number 11, you would answer that 2+2+7 = 11. Lucas now wants to trick you by choosing a number X such that there will be no valid answer. For example, if S={2,1,2,7}, it is not possible to select elements of S that sum up to 6. You are given the int[] S. Find the smallest positive integer X that cannot be obtained as the sum of some (possibly all) elements of S. Constraints: - S will contain between 1 and 20 elements, inclusive. - Each element of S will be between 1 and 100,000, inclusive. But in the editorial solution it has been written: How about finding the smallest impossible sum? Well, we can try the following naive algorithm: First try with x = 1, if this is not a valid sum (found using the methods in the previous section), then we can return x, else we increment x and try again, and again until we find the smallest number that is not a valid sum. Let's find an upper bound for the number of iterations, the number of values of x we will need to try before we find a result. First of all, the maximum sum possible in this problem is 100000 * 20 (All numbers are the maximum 100000), this means that 100000 * 20 + 1 will not be an impossible value. We can be certain to need at most 2000001 steps. How good is this upper bound? If we had 100000 in each of the 20 numbers, 1 wouldn't be a possible sum. So we actually need one iteration in that case. If we want 1 to be a possible sum, we should have 1 in the initial elements. Then we need a 2 (Else we would only need 2 iterations), then a 4 (3 can be found by adding 1+2), then 8 (Numbers from 5 to 7 can be found by adding some of the first 3 powers of two), then 16, 32, .... It turns out that with the powers of 2, we can easily make inputs that require many iterations. With the first 17 powers of two, we can cover up to the first 262143 integer numbers. That should be a good estimation for the largest number. (We cannot use 2^18 in the input, smaller than 100000). Up to 262143 times, we need to query if a number x is in the set of possible sums. We can just use a boolean array here. It appears that even O(log(n)) data structures should be fast enough, however. So how is it possible that 100000*20 will give us the maximum sum possible?. Wouldnt adding all the elements of S give us the maximum sum?.Also i cant seem to understand the entire solution at all. How the subsets are used?. Can someone please explain the entire solution to me?. Im not getting the maths behind this. I am a total newbie on dynamic programming. Thank you and sorry if i have asked too many questions.
nicks_4317
1

голосов
0

ответ
91

Просмотры

Smart pointer memory management across DLL boundary with object-oriented API

Я думаю, что следующие классы безопасны разоблачить из DLL как часть API, поскольку они содержат только чистые виртуальные элементы. Пространство имен MyAPI {{Изображение структуры виртуального ширин Int () = 0; Высота виртуальной Int () = 0; Данные виртуальный символ без знака * () = 0; виртуальная пустота Dispose () = 0; // будет `удалять this` внутри DLL} STRUCT Camera {виртуальное изображение * GetFrame () = 0; // вызывающий абонент имеет возвращаемый объект}} Пользователь АФИ должен помнить, чтобы позвонить Dispose () на указатель, возвращаемый камеры :: GetFrame (). Для того, чтобы удалить это бремя от пользователя, я хочу, чтобы изменить файл заголовок для этого: пространств имен MyAPI {шаблон с помощью unique_ptr = зОго :: unique_ptr; Изображение структура {виртуальная ширина Int () = 0; Высота виртуальной Int () = 0; Данные виртуальный символ без знака * () = 0; Виртуальный ~ изображение () {}; } Структура камеры {unique_ptr GetFrame () {вернуться unique_ptr (getFrameRaw (), [] (авто * I) {deleteImage (я);}); } Частные: виртуальное изображение * getFrameRaw () = 0; // вызывающий абонент имеет возвращаемый объект} ехЬегп "C" MYAPI_API пустота deleteImage (изображение * I); // будет `удалять i` внутри DLL} Является ли это так безопасно, как в первой версии? не класс камеры больше не только чисто виртуальных пользователей, но невиртуальном член прямо в файле заголовка для EXE встраивать. Означает ли это, что я делаю это безопасно? MYAPI_API пустота deleteImage (Изображение * я); // будет `удалять i` внутри DLL} Является ли это так безопасно, как в первой версии? не класс камеры больше не только чисто виртуальных пользователей, но невиртуальном член прямо в файле заголовка для EXE встраивать. Означает ли это, что я делаю это безопасно? MYAPI_API пустота deleteImage (Изображение * я); // будет `удалять i` внутри DLL} Является ли это так безопасно, как в первой версии? не класс камеры больше не только чисто виртуальных пользователей, но невиртуальном член прямо в файле заголовка для EXE встраивать. Означает ли это, что я делаю это безопасно?
Museful
1

голосов
0

ответ
41

Просмотры

Жизненный цикл объекта и многопоточной

Мы передаем объект в другом потоке. Это, предполагают, чтобы быть удалены, когда функция oops2 () выходит за рамки. Как это возможно, что после удаления объекта данных мы не имеем аварии в другом потоке, а другой поток успешно работает с этим объектом? класс данных {общественности: Data (интермедиат Вэл = 0) {} ИНТ GETVAL () сопзЬ {вернуть mVal; } Недействительными SETVAL (интермедиат Val) {mVal = Val; } Защищенный: INT mVal; }; недействительными set_val (интермедиат & я, данные * данные) {данных-> SETVAL (я); } Недействительными print_val (Данные * Данные) {соиЬ
Oleg Kuzenko
1

голосов
1

ответ
51

Просмотры

Проверьте повышение :: межпроцессного :: вектор имеет достаточную емкость до написания?

Я использую общий вектор разделить объекты через память: с помощью ShmemAllocator = бип :: распределитель; используя MyVector = BIP :: вектор; BIP :: разрешения завивки; perm.set_unrestricted (); segment.reset (новый бип :: managed_shared_memory (BIP :: open_or_create, shared_memory_name, numBytes, 0, завивка)); Const ShmemAllocator alloc_inst (сегментные-> get_segment_manager ()); VEC = сегментные-> find_or_construct (shared_vector_name) (alloc_inst); Обратите внимание, что вектор создается в managed_shared_memory объекта, и это создается путем указания количества байтов, а не число элементов вектора. Затем я пишу элементы в вектор: Int записи (Const станд :: вектор и VEC) {бип :: scoped_lock замок (* sdc.mutex); для (сопзИте авто и пункта: VEC) {sdc.vec-> push_back (пункт); } Sdc.cond_empty-> notify_all (); } Что это самый безопасный способ, чтобы проверить, есть ли у меня достаточно мест, чтобы написать все свои элементы, перед записью? Я бы очень хотел, чтобы избежать простого назначения большого количества байтов, и надеюсь, что я никогда не ударил его!
user997112

Просмотр дополнительных вопросов