Вопросы с тегами [stl]

1

голосов
2

ответ
62

Просмотры

Как я могу удалить элемент из набора в C ++, не удаляя его?

Использование зОго :: установлен в C ++, единственный способ, которым я могу найти, чтобы удалить элемент из набора состоит в использовании методы стирания. Это удаляет элемент в вопрос, который я не хочу, чтобы это произошло. Единственный способ, которым я могу думать, чтобы удалить элемент из набора, не удаляя его было бы создать новый набор и добавить все элементы старого набора к нему итеративно, убедившись, что не добавить элемент, который должен быть удален из набор, затем удалить старый набор. Есть ли уборщик способ сделать это?
skrooms
1

голосов
1

ответ
232

Просмотры

Как СТЛ контейнеры GDB печати

Как GDB довольно напечатать этот контейнер? Const unordered_map отображение {{ "привет", 1}, { "мир", 2}}; (GDB) р карта $ 1 = станд :: unordered_map с 2-х элементов = {[ "мир"] = 2, [ "привет"] = 1} Как я могу получить эту функцию для моего пользовательского контейнера?
applewil
1

голосов
0

ответ
202

Просмотры

Simplygon проблема импорта текстур

было бы здорово, если бы кто-то может мне помочь. Я пытаюсь импортировать текстурированные модели из Blender в Simplygon 8. Проблема в том, что все прошло хорошо, за исключением, что текстуры не импортируются на Simplygon, так что я не могу оптимизировать их. Модель экспортируется в FBX, OBJ и STL, но ни один из них не импортировать текстуры :( вы :)
1

голосов
1

ответ
53

Просмотры

Пользовательский Распределитель с вектором STL (в Visual Studio набора инструментов)

При использовании пользовательского аллокатора с вектором STL (в пределах Visual Studio набора инструментов) конструктор вызывается 3 раза, а деструктор вызывается 4 раза. Что мне не хватает? Ниже приведен код и его выход: # include # include # include # include # include с использованием патезраса; Шаблон структура Mallocator {ЬурейеГо T value_type; Mallocator () noexcept {соиЬ
luc
1

голосов
1

ответ
52

Просмотры

Тип разлагающихся СТЛ итератор

Предположим, у меня есть интерфейс, который возвращает диапазон значений. Реализация этого интерфейса может использовать различные контейнеры, чтобы обеспечить эти цифры. класс MyClassI {общественности: виртуальный станд :: пара чисел () Const = 0; } Класс MyClassC: общественные MyClassI {общественности: виртуальный станд :: пара чисел () сопзЬ {возвращение станд :: make_pair (numbers.begin (), numbers.end ();} частное: станд :: вектор числа;} Интересно, если есть способ «распад» контейнер типа от итератора класса MyClassI {общественности: виртуальный станд :: пара чисел () Const = 0;} Я могу конечно поставить оригинальный итератор на куче, и я могу обернуть это. указатель с классом шаблона, чтобы обеспечить от типа значения в качестве итератора. Интересно, есть ли уже что-то подобное в импульсе или что-то с самой себя. Я могу представить себе что-то вроде функции станда / буста,
user2281723
1

голосов
0

ответ
40

Просмотры

Change data in std::vector inside const context

Это есть способ изменить данные, хранящиеся внутри станд :: вектор внутри константной функции? Смотрите следующий код, чтобы понять, что я хочу сделать: // класс держит свойства и класс выходных данных {общественности: Int * значение; // возможность 1: сырье указатель станд :: вектор ВК; // возможность 2: станд :: вектор изменяемые станд :: вектор ут; // возможность 3: изменяемый вектор // станд :: вектор ут; что-то вроде этого, }; класс Node {Выход из; недействительный тест () сопзЬ {// я хочу изменить «данные» о выходе но не out.values ​​Object [0] = 0; // работает: я могу изменить выходные данные out.values ​​= nullptr; // работы: ошибка компиляции, я не могу изменить указатель out.vc [0] = 1; // ошибка компиляции, не представляется возможным :( out.vm [0] = 1; // это то, что я хочу out.vm.resize (3); // это теперь возможно, но должно быть не возможно}}; Я могу использовать сырой указатель для достижения своей цели, но я предпочел бы зЬй :: вектор, если это возможно. Вектор изменяемого содержания может выглядеть следующим образом: шаблон класс mutable_vector: общественный СТД :: вектор {общественность: T & оператор [] (интермедиат индекс) сопзЬ {возвращение const_cast (это) -> данные () [индекс]; } ИмяТипа станд :: вектор :: итератор начать () сопзЬ {возвращение const_cast (это) -> начать (); } ИмяТипа станд :: вектор :: итератор rbegin () сопзЬ {возвращение const_cast (это) -> rbegin (); }}; } ИмяТипа станд :: вектор :: итератор начать () сопзЬ {возвращение const_cast (это) -> начать (); } ИмяТипа станд :: вектор :: итератор rbegin () сопзЬ {возвращение const_cast (это) -> rbegin (); }}; } ИмяТипа станд :: вектор :: итератор начать () сопзЬ {возвращение const_cast (это) -> начать (); } ИмяТипа станд :: вектор :: итератор rbegin () сопзЬ {возвращение const_cast (это) -> rbegin (); }};
undefined
16

голосов
1

ответ
407

Просмотры

В чем разница между `автоматического х = вектор ()` и `вектор x`?

Я пишу код и есть вопрос. В чем разница между автоматическим х = вектором (); и вектор х ;? Являются ли они все-таки или есть какая-то разница со сложностью?
Autoratch
1

голосов
3

ответ
89

Просмотры

Существует ли стандартный алгоритм для сортировки и разделения двух диапазонов следующим образом?

Интересно, существует ли стандартный подход к следующему алгоритму. Я хочу, чтобы отсортировать и разделить два диапазона х и у. Оба х и у должны быть разделены с помощью двоичного предиката, который принимает элемент из й и у. Сигнатура функции будет что-то вдоль линий: шаблон станд :: пара sort_and_partition (ForwardIt1 first1, ForwardIt1 last1, ForwardIt2 first2, ForwardIt2 last2, Compare комп, BinaryPredicate р); Здесь комп пересылается StD :: рода. Двоичное предикат р используется для разбиения. Тогда, например: станд :: вектор х; станд :: вектор у; авто [хт, ут] = sort_and_partition (x.begin (), x.end (), y.begin (), y.end (), станд :: меньше {}, станд :: equal_to {}); Это привело бы к четырем диапазонам: x1: [x.begin (), хт) х2: [хт, x.end ()) у1: [y.begin (), ут) у2: [ут, у. конец ()), где, как X1 и Y1 сортируются и содержат эквивалентные элементы (в соответствии с двоичным предиката р). Эффективно X1 и Y1 содержит отсортированное пересечение для й и у в примере. х2 и у2 сортируются, а также, и содержат все элементы, уникальные для й и у соответственно. Я отсутствую очевидный подход к реализации такого алгоритма путем объединения существующих алгоритмов в STL? Я планирую сейчас написать собственную реализацию для этого, но хотел проверить здесь первый прежде, чем начать реализацию. Что было бы хорошее название для этого алгоритма? Я отсутствую очевидный подход к реализации такого алгоритма путем объединения существующих алгоритмов в STL? Я планирую сейчас написать собственную реализацию для этого, но хотел проверить здесь первый прежде, чем начать реализацию. Что было бы хорошее название для этого алгоритма? Я отсутствую очевидный подход к реализации такого алгоритма путем объединения существующих алгоритмов в STL? Я планирую сейчас написать собственную реализацию для этого, но хотел проверить здесь первый прежде, чем начать реализацию. Что было бы хорошее название для этого алгоритма?
1

голосов
3

ответ
223

Просмотры

Structure for hierarchal Component storage

Я моргнув эту проблему в моей голове в течение нескольких дней, и теперь не пришел к каким-либо удовлетворительным выводам, поэтому я решил, я хотел бы попросить экипаж SO их мнения. Для игры, я работаю я использую модели компонентных объектов, как описано здесь и здесь. Это на самом деле происходит довольно хорошо, но мое текущее решение для хранения оказываясь ограничения (я могу только просить компоненты по имени класса или произвольное название «семьи»). То, что я хотел бы это возможность запросить данный тип и перебирать все компоненты этого типа или любого типа, производный от него. При рассмотрении этого я первый реализовал простую схему RTTI, которая хранит тип базового класса через производный тип в таком порядке. Это означает, что RTTI для, скажем, спрайта будет: компонент :: визуализируемой :: спрайт. Это позволяет мне легко сравнивать типы, чтобы увидеть, если тип А является производным от типа B, просто сравнивая все элементы B: то есть компонент :: :: спрайт отображаемого производные от компонента :: визуализируемого, но не компонент :: таймера. Простой, эффективный, и уже реализованы. То, что я хочу сейчас способ хранения компонентов таким образом, что представляет эту иерархию. Первое, что приходит на ум, это дерево с использованием типов как узлы, например, так: компонент / \ таймер отображаемый / / \ shotTimer спрайт частицы На каждом узле я бы хранить список всех компонентов этого типа. Таким образом, запрашивающие «компонент ::» узел отображаемого даст мне доступ ко всем компонентам визуализируемых независимо от производного типа. Загвоздка в том, что я хочу, чтобы иметь возможность получить доступ к этой компоненте с итератором, так что я мог бы сделать что-то вроде этого: for_each (renderable.begin (), renderable.end (), renderFunc); и есть, что итерации по всему дереву из визуализируемых вниз. У меня это довольно много работает, используя действительно некрасивую карту / вектор структуру узла / дерево и пользовательский вперед итератор, который отслеживает стек узел, где я был. Все время реализации, хотя, я чувствовал, что должен быть лучше, более четкую дорогу ... Я просто не могу думать об одном :( Так что вопрос: Могу ли я чрезмерно усложнять это излишне Есть некоторые очевидные упрощения я «м отсутствует, или ранее существовавшая структура я должен использовать? или это просто inheritly сложная проблема, и я, наверное, все в порядке уже? Спасибо за любой вход у вас есть! и есть, что итерации по всему дереву из визуализируемых вниз. У меня это довольно много работает, используя действительно некрасивую карту / вектор структуру узла / дерево и пользовательский вперед итератор, который отслеживает стек узел, где я был. Все время реализации, хотя, я чувствовал, что должен быть лучше, более четкую дорогу ... Я просто не могу думать об одном :( Так что вопрос: Могу ли я чрезмерно усложнять это излишне Есть некоторые очевидные упрощения я «м отсутствует, или ранее существовавшая структура я должен использовать? или это просто inheritly сложная проблема, и я, наверное, все в порядке уже? Спасибо за любой вход у вас есть! и есть, что итерации по всему дереву из визуализируемых вниз. У меня это довольно много работает, используя действительно некрасивую карту / вектор структуру узла / дерево и пользовательский вперед итератор, который отслеживает стек узел, где я был. Все время реализации, хотя, я чувствовал, что должен быть лучше, более четкую дорогу ... Я просто не могу думать об одном :( Так что вопрос: Могу ли я чрезмерно усложнять это излишне Есть некоторые очевидные упрощения я «м отсутствует, или ранее существовавшая структура я должен использовать? или это просто inheritly сложная проблема, и я, наверное, все в порядке уже? Спасибо за любой вход у вас есть!
Toji
1

голосов
4

ответ
543

Просмотры

Назначение вектора :: итератор обугливается пост массива VS 2003

Я пытаюсь получить некоторые C ++ код, первоначально написанный в Microsoft Visual Studio (VS) 2003 для компиляции под VS 2008 и у меня возникли проблемы с поиском эффективного решения для назначения вектора :: итератор на начало массив символов. Я знаю, что итераторы пошли от того, чтобы определить, как простой тип указателя (T *) к типу класса между VS 2003 и VS 2005. Вот простой пример того, что я говорю: ЬурейеЕ станд :: вектор CharContainer; ЬурейеЕ CharContainer :: итератор InputIt; INT FindNumMsgs (InputIt _inputIter, Int _len); INT ProcessBufferForMsgs (символ BUF [], Const size_t MaxLen) {INT numMsgs = FindNumMsgs (InputIt (BUF), MaxLen); ...} Итак, в VS 2003, это компилируется и работает без проблем (так как итераторы определяются как Т *). В VS 2008, это ошибки с C2440 (функцией стиль литья), так как я уже не могу просто присвоить итератор с указателем Buf. Что бы я сделал, чтобы получить эту работу в VS 2008 теперь, итераторы типа класса? Я мог бы скопировать буфер в вектор, а затем передать в myVec.begin (), но я должен думать, что я могу этого избежать.
Jason Bard
1

голосов
1

ответ
152

Просмотры

Почему не компилятор правоприменение в const_iterator

Рассмотрим следующий код: #include #include класса А {общественности: INT I; недействительное удовольствие () {я = 999; } Аннулируются весело () сопзЬ {станд :: соиЬ
Cheok Yan Cheng
1

голосов
3

ответ
619

Просмотры

создания вектора со ссылками на некоторые из элементов другого вектора

Я хранятся экземпляры класса А в станд: вектор, vec_A, как vec_A.push_back (A (I)). Код показан ниже. Теперь я хочу, чтобы хранить ссылки некоторые из экземпляров класса А (в vec_A) в другом векторе или другой массив. Например, если A.getNumber () возвращает 4, 7, 2, я хочу, чтобы хранить указатель на этот экземпляр А в другой вектор, скажем станд: вектор filtered_A или массив. Может кто-то сеет меня, как это сделать ?? Спасибо! класс А {общественности: INT getNumber (); А (INT вал); ~ А () {}; частные: INT Num; }; A :: A (INT вал) {Num = Val; }; INT A :: getNumber () {возвращение Num; }; INT основных () {Int I = 0; INT Num; станд :: вектор vec_A; для (я = 0; г <10; я ++) {vec_A.push_back (A (I)); } Станд :: соиЬ
memC
1

голосов
1

ответ
1.3k

Просмотры

производительность Windows CE OpenCV

Им с помощью OpenCV на Windows CE 6.0 R2, и производительность является довольно слабой. Я могу сделать 300 YUV в RGB преобразования в секунду (используя мой код), но OpenCV занимает 3 секунды, чтобы выполнить один cvGoodFeaturesToTrack () на VGA изображения. Я знаю, что OpenCV использует STL много, кто-нибудь есть опыт работы с STL на Windows CE? Спасибо, Filip
Figaro
1

голосов
1

ответ
1.2k

Просмотры

C ++: Доступ к элементам Карты струнных и бустер Круговые Буфера

Я пишу программу, которая считывает текстовый файл с названиями городов в вектор, а затем использует СТЛО :: карту ассоциировать каждый город с повышающим кольцевым буфером. У меня также есть вектор температурных данных, которые я преобразован в двойной тип после прочтения его как строки из другого текстового файла. Я хочу знать, как кормить эти данные в кольцевой буфер моего выбора. Например, данные о температуре от Бостона, поэтому я хочу, чтобы поместить его в кольцевой буфер, связанный с Бостоном. Если кто-то может показать мне, как это сделать, я бы очень признателен! Вот мой код. Код, имеющий дело с картами находится вблизи дна. #include <карта> #include <алгоритм> #include <cstdlib> #include <fstream> #include <iostream> #include <итератор> #include <stdexcept> #include <строка> #include <sstream> #include <вектор> #include <полезность> #include <подталкивание / circular_buffer.hpp> двойной StrToDouble (станд :: строка сопзЬ & s) // функция для преобразования строки векторов в два раза. {Станд :: istringstream ISS (с); двойное значение; если бросить станд :: runtime_error ( "недействительна двойной") ((ISS >> значение!)); возвращаемое значение; } С помощью патезраса; ИНТ основной () {станд :: fstream fileone ( "tempdata.txt"); // считывание данных температуры в вектор. станд :: строка х; вектор datastring (0); в то время как (GetLine (fileone, х)) {datastring.push_back (х); } Vectordatadouble; станд :: преобразование (datastring.begin (), datastring.end (), станд :: back_inserter (datadouble), StrToDouble); // преобразование его в два раз с помощью функции зОго :: fstream filetwo ( «cities.txt»); // чтение городов в вектор. станд :: строка у; вектор город (0); в то время как (GetLine (filetwo, у)) {cities.push_back (у); } карта cities_and_temps; // создание карты, чтобы связать каждый город с кольцевым буфером. для (беззнаковое INT I = 0; я <cities.size (); я ++) {cities_and_temps.insert (make_pair (cities.at (I), новый импульс :: circular_buffer (32))); } Возвращает 0; }
siegel
1

голосов
2

ответ
1.4k

Просмотры

Проблема с дека: карта не удается, но вектор и список не?

У меня есть код: ЬурейиЕ карты someMap; someMap * newEM; someMap :: итератор ИТЭР; // ... (* newEM) [iter-> первый] .Вмонтировать ((* newEM) [iter-> первый] .end (), iter-> second.begin (), iter-> second.end () ); что намеревался объединить два someMap. Но есть проблема, что сбой программы из-за ошибки памяти (0xcdcdcdcd указателя). И это происходит, только если карта содержит двусторонние очереди, и все работает прекрасно, когда есть списки или векторы. Что это может быть? Вот проблема памяти, когда я использую двусторонние очереди. Вставка вызывает кучу тетрадей конструкторов. Также у меня есть некоторое свойство SomeClass, что после копирования указывает на память, которая выглядит следующим образом: 0x00959B48 00 00 00 00 00 00 00 00 правый перед возникновении ошибки (в копии-конструктор SomeClass), это поле (копирования объекта) точек здесь ( тот же адрес):
Grumm
1

голосов
2

ответ
101

Просмотры

Контейнер указателей выпуска

У меня есть классы А, В, С, D и следующая иерархия: класс А {В * б; }; класс В {C * C; }; Шаблон класса C {список DS; }; Класс D {}; Я выделить сначала в качестве члена A * внутри базового класса, используя новый А (). В AI выделяют б, используя новый B (). В BI выделяют с использованием нового C (). Как только я пытаюсь вызвать ds.size () сбои программы. EXC_BAD_ACCESS возникает внутри йз, когда он пытается вызвать метод начать () в размере (). Вы знаете, почему это произошло? Я использую C ++ в течение нескольких лет, но это мой первый набег на использование указателей в пределах стандартных контейнеров, так что, может быть, я что-то очевидное отсутствует.
KomodoDave
1

голосов
1

ответ
431

Просмотры

потребление памяти Boost.Flyweight

Я просто читал статью о Boost.Flyweight производительности Как вы можете видеть в ссылке накладные расходы завода - для hashed_factory: ~ 2,5 * SizeOf (слово) - для set_factory: 4 * SizeOf (слово) Основной вопрос .... почему 4 слова для набора, а не ноль? Насколько я знаю, с использованием хэш предполагает вычисления и хранения хэш-ключа, при использовании набора: не он реализован в виде красно-черного дерева, вставки и просмотровых занимает журнал (п), поэтому значения не сохраняются и накладные расходы памяти должна быть равна нулю (с недостатком, что вместо одного сравнения в случае хэш вы будете иметь журнал (N) сравнений). Где ошибка?
cprogrammer
1

голосов
3

ответ
755

Просмотры

how to manipulate the txt file using C++ STL HOmework

I have a txt file that contains name, id number, mobilenumber, and location in comma separated line. example Robby, 7890,7788992356, 123 westminister tom, 8820, 77882345, 124 kingston road My task is to retrieve Look up all of an employee's information by name. Look up all of an employee's information by ID. Add the information of an employee. Update the information of an employee. SO far I have read the file and stored the information in a vector. Code is shown below. For tasks 1)Look up all of an employee's information by name. I will iterate in the vector and prints information containing the name . I will be able to do that 2) simialry in text file I will look for id and prints information about that. BUT I am clueless about point 3 & 4. I am posting my code below void filter_text( vector *words, string name) { vector::iterator startIt = words->begin(); vector::iterator endIt = words->end(); if( !name.size() ) std::cout
samprat
1

голосов
2

ответ
604

Просмотры

C ++ Builder STL для OS X не удается?

Кто-нибудь пытался что-то же просто, как #include в приложении для Mac скомпилированные с XE2? Это что-то настолько основным сломана в XE2 обновления 1 для C ++ Builder или моя установка не работает? Простое добавление #include в новом огне обезьяна HD приложение, я получаю построить неудачи: [bcc32 Error] cstdlib (43): E2015 неоднозначность между 'ldiv_t' и 'Posix :: STDLIB :: ldiv_t' Полным контекстом парсером unit1.cpp (7 ): #include C: \ Program Files \ Embarcadero \ RAD Studio \ 9.0 \ включить \ boost_1_39 \ импульс \ tr1 \ tr1 \ вектор вектор (16): #include C: \ Program Files \ Embarcadero \ RAD Studio \ 9.0 \ включить \ boost_1_39 \ подталкивание / TR1 / подробно / config_all.hpp config_all.hpp (48): #include C: \ Program Files \ Embarcadero \ RAD Studio \ 9.0 \ включить \ Dinkumware \ cstdlib cstdlib (32): патезрасе Из кода: // ------------------------------------------------ --------------------------- #include #pragma hdrstop #include "Unit1.h" #include // ------- -------------------------------------------------- ------------------ #pragma пакет (smart_init) #pragma ресурс "* .fmx" TForm1 * Form1; // ------------------------------------------------ --------------------------- __fastcall TForm1 :: TForm1 (TComponent * Владелец): TForm (Владелец) {} // ---- -------------------------------------------------- ---------------------
Gregor Brandt
1

голосов
2

ответ
739

Просмотры

STL list out of range in the first push_back

Я использовал список STL в моей программе win32, которые идут в странную проблему. Конкретно, я получил ошибку выхода за диапазон выполнения в первый раз список сделал push_back (). Вот декларация этого экземпляра списка: AtomActionList g_AtomActions [MAXPLAYER]; Это глобальная переменная и в том же файле с вхождением _tWinMain (). Вот соответствующие определяет (они разделены в 3 различных файлах): #define MAXPLAYER 2 ЬурейеГо INT AtomAction_id; ЬурейиЙ станд :: Список AtomActionList; А вот те части, которые когда-либо использовать g_AtomActions в главном файле: ... g_AtomActions [_i] .push_back (aaid); ... если {shareData.newAtomAction [_i] = g_AtomActions [_i] .front () (g_AtomActions [_i] .empty (!)); g_AtomActions [_i] .pop_front (); } Там раньше было ясно метод в функции инициализации, но я заметил это, когда я увидел время выполнения " м вполне уверен, что ошибка происходит в первый раз g_AtomActions [_i] .push_back (aaid); выполняется. _i равно 0 и aaid 2, размер g_AtomActions [_i] 0. Никакие другие детали не когда-либо использовали этот идентификатор еще. Я не смог понять, почему. Так что я попытался изменить его на DEQUE, надеялись получить удачу, и неожиданно нашел g_AtomActions [_i] .push_back (aaid); работает в моей программе (но опять ошибочный в другой части, которая используется список). Может кто-нибудь дать возможное объяснение? м вполне уверен, что ошибка происходит в первый раз g_AtomActions [_i] .push_back (aaid); выполняется. _i равно 0 и aaid 2, размер g_AtomActions [_i] 0. Никакие другие детали не когда-либо использовали этот идентификатор еще. Я не смог понять, почему. Так что я попытался изменить его на DEQUE, надеялись получить удачу, и неожиданно нашел g_AtomActions [_i] .push_back (aaid); работает в моей программе (но опять ошибочный в другой части, которая используется список). Может кто-нибудь дать возможное объяснение?
lastland
1

голосов
1

ответ
1.6k

Просмотры

Python SWIG обернутого вектор вектора двойников выглядит как кортежи

У меня есть функция в C ++, который возвращает векторный объект. Я завернул на Python с использованием Swig. Когда я это называю, я не может впоследствии изменить выходную функцию, используя изменения размера () или push_back () методу вектора. Когда я пытаюсь это, я получаю сообщение об ошибке, что «кортеж» объект не имеет атрибута «изменить размер» или «push_back». Есть ли преобразование Swig векторов в объекты кортежа, когда я общаюсь с ними в Python? Если это так, то я предполагаю, что выход из этой функции в Python неизменен, что является проблемой. Я могу передать этот объект в обернутые методы, которые принимают вектор векторов двойников. Я просто не могу возиться с ним, используя методы, вектор внутри Python. Любое объяснение, почему это или идеи о том, обходных будет оценен. Вот мой файл SWIG для справки. линии шаблонов STL должны располагаться ближе к концу: / * SolutionCombiner.i * /% модуль SolutionCombiner% {/ * Помещенный файлы заголовков здесь или объявления функций, как показано ниже * / #include "Coord.hpp" #include "MaterialData.hpp" #include " FailureCriterion.hpp»#include "QuadPointData.hpp" #include "ModelSolution.hpp" #include "ExclusionZone.hpp" #include "CriticalLocation.hpp" #include "FailureMode.hpp" #include "ExecutiveFunctions.hpp" #include #include %}% {#define SWIG_FILE_WITH_INIT станд :: ostream & new_ofstream (Const символ * имя_файла) {возвращение * (новый станд :: ofstream (имя_файла)); } Станд :: IStream & new_ifstream (Const символ * FileName) {возвращение * (новый станд :: ifstream (FileName));
Ross_Mc
1

голосов
2

ответ
1.3k

Просмотры

Есть ли способ вставки множества STL копирует значение переданных объектов?

У меня есть такой C ++ кода (пожалуйста, не спрашивайте, почему она выглядит так уродливо;) - вы должны верить, что из-за дальнейшую часть коды это действительно имеет смысл): IntSet темп; SuperSet SUPERSET; для (UINT = 0; г <noItems; я ++) {temp.insert (I); superSet.insert (температура); temp.clear (); } Она предназначена для приготовления noItems наборов целых чисел (IntSet, каждое из которых содержит одно числа значения) и вставить его в другой набор (SuperSet). Оба набора определяется следующим образом: ЬурейиЙ неподписанный Int DATATYPE; ЬурейеЕ станд :: набор IntSet; ЬурейеЕ станд :: набор SuperSet; Для меня этот код не должен работать, как задумано, потому что только после установки темпа в SUPERSET я очистив темп, и я обнаружил, что вставка получает ссылку в качестве аргумента: пара вставки (Const value_type & х); (Http://www.cplusplus.com/reference/stl/set/insert/) Итак, в результате кода, представленного выше, я должен получить SuperSet, содержащий только очищается IntSet лет. Но «к сожалению», этот код работает - все IntSet наполнены соответствующими значения ... Так что мой вопрос - что делает метод вставки из STL Установит действительно в своем теле? Есть ли просто скопировать объекты, которые передаются ей по ссылке? И какова разница в поведении этого метода между передачей объекта или примитивных типов? Спасибо за ответ! ы установить действительно в своем теле? Есть ли просто скопировать объекты, которые передаются ей по ссылке? И какова разница в поведении этого метода между передачей объекта или примитивных типов? Спасибо за ответ! ы установить действительно в своем теле? Есть ли просто скопировать объекты, которые передаются ей по ссылке? И какова разница в поведении этого метода между передачей объекта или примитивных типов? Спасибо за ответ!
Maciek
1

голосов
3

ответ
235

Просмотры

Можно ли написать «полный» класс C ++ с членом массива нулевой длины?

У меня есть некоторый тип данных, которые, если бы я должен были использовать обычный старый C, будут реализованы в виде ЬурейеЙ структуры {... много других членов здесь ... беззнаковое короткое _size; обугливается _buf [0]; } мои данные; То, что я хотел бы сделать, это в основном делают, что класс и добавить обычные операторы, такие как меньше, равенство, конструктор копирования, назначения оператора, и так далее. Как вы можете себе представить, я бы тогда с помощью такого класса в ассоциативных контейнерах, как станд :: карта как его ключ. Мне нужен буфер, чтобы быть в идеале на том же уровне самого объекта, в противном случае, когда нужно сравнить два из них (буферов) Я бы процессор принимать указатель и загружать его в памяти; Я не хочу использовать зЬй :: вектор, потому что память выделяется не должны быть смежными с остальными членами данных. Основной проблемой для меня является тот факт, что в CI будет иметь функцию, которая, учитывая размер буфера будет выделять надлежащий объем памяти для него. В C ++ такая вещь не может быть сделано. Я прав? ура
Emanuele
1

голосов
1

ответ
1.3k

Просмотры

Pre-Allocation of std::map , How to pre-allocate properly?

Проблема: Я работаю с очень большими наборами данных, вплоть до максимума 8 * 1024 * 1024 идентичностей; Я предварительно выделяется массив структур, на который указывает недействительным * части. «Свободные» указатели выталкиваются в стек, выскочили, как они используются, и толкнули, как они удаляются из hash_map. (Это близко к 256MB памяти) я идентифицировал большинство времени системы / производительность, как потребляются в оных операций станд :: hash_map. структура заказ; станд :: hash_map OrderDatabase; То, что я действительно хотел бы сделать, это просто передать MAX_ORDERS в конструктор: станд :: hash_map OrderDatabase (MAX_ORDERS); // и он предварительно выделить контейнеры таким образом, чтобы вставка / удаление не вовлеченный таНоса / бесплатно. Предложения приветствуются! Я стараюсь придерживаться строго STL / C ++ в качестве примечания. Edit / Update: Я ве также попытался следующее: hash_map MapTest; hash_map :: allocator_type MapAlloc = MapTest.get_allocator (); пара * ичных = MapAlloc.allocate (MAX_ORDERS); // здесь проблема в том, что ulonglong является сопзом! Идея состояла в том, чтобы подтолкнуть каждый отдаст стеком, и поп-музыки для Alloc, и использовать вставку вместо maptest [ID] = PTR; // Update 2: Создать стек <пару *> pointer_stack и нажмите предварительно выделены указатели, Поп указатель. Присвоение значения; Вставить в hash_map: Найти элемент, получить указатель на адрес: он появляется hash_map выделяется новая пара, даже если я назвал вставки. Это делает удаление & толкая к стопке не представляется возможным. Идея состояла в том, чтобы подтолкнуть каждый отдаст стеком, и поп-музыки для Alloc, и использовать вставку вместо maptest [ID] = PTR; // Update 2: Создать стек <пару *> pointer_stack и нажмите предварительно выделены указатели, Поп указатель. Присвоение значения; Вставить в hash_map: Найти элемент, получить указатель на адрес: он появляется hash_map выделяется новая пара, даже если я назвал вставки. Это делает удаление & толкая к стопке не представляется возможным. Идея состояла в том, чтобы подтолкнуть каждый отдаст стеком, и поп-музыки для Alloc, и использовать вставку вместо maptest [ID] = PTR; // Update 2: Создать стек <пару *> pointer_stack и нажмите предварительно выделены указатели, Поп указатель. Присвоение значения; Вставить в hash_map: Найти элемент, получить указатель на адрес: он появляется hash_map выделяется новая пара, даже если я назвал вставки. Это делает удаление & толкая к стопке не представляется возможным.
roscoe_casita
1

голосов
2

ответ
217

Просмотры

СТЛ оператор карты вставки разница пары []

карта vectorDoubleMap; vectorDoubleMap [пара (10, 10)] = 1; // 1. vectorDoubleMap.insert (пара (10, 10), 1); // 2. '1.' заявление компиляция сделана, но «2.» Заявление не компилируется. В чем разница между этими двумя утверждением?
BokukPark
1

голосов
1

ответ
489

Просмотры

QStringList альтернатива в STL или Boost,

Есть ли альтернатива QStringList в Boost, или STL. То, что я хочу добиться того, чтобы разделить путь, например. DVB: //1.2.3.4/launchpad/dyn/index.htm отделить строки, как это может быть сделано просто в списке QString: QStringList путь = objectPath.split (QChar ( '/'), QString :: SkipEmptyParts); Благодарю вас.
bartebly
1

голосов
1

ответ
658

Просмотры

coredump: read file content to std::string

Я сталкиваюсь с CoreDump при чтении содержимого файла StD :: строки. Кодекс список ниже: BOOL readContentFromFile (Const символ * имя_файла, станд :: строка и содержание) {станд :: ifstream т (Filename); если (! т) {вернуться ложным; } T.seekg (0, STD :: IOS :: конец); content.reserve (t.tellg ()); t.seekg (0, станд :: ИОС :: BEG); content.assign ((станд :: istreambuf_iterator (т)), станд :: istreambuf_iterator ()); возвращает истину; } Но иногда код причина CoreDump, как показано ниже: ... # 4 # 5 0x00007f347a0f3945 в повышении () из /lib64/libc.so.6 # 6 0x00007f347a0f4f21 в прерывании () из /lib64/libc.so.6 # 7 0x00007f347a953504 в __gnu_cxx :: __ verbose_terminate_handler () () от /usr/lib64/libstdc++.so.6 # 8 0x00007f347a951946 в ?? () Из /usr/lib64/libstdc++.so.6 # 9 0x00007f347a951973 в станд :: прекратить () () от /usr/lib64/libstdc++.so. 6 # 10 0x00007f347a951a5a в __cxa_throw () из /usr/lib64/libstdc++.so.6 # 11 0x00007f347a8ef2ba в станд :: __ throw_ios_failure (символ сопз *) () от /usr/lib64/libstdc++.so.6 # 12 0x00007f347a901317 в станд :: basic_filebuf :: сгущенного () () от /usr/lib64/libstdc++.so.6 # 13 0x00000000004c2751 в символ * станд :: строка :: _ S_construct (станд :: istreambuf_iterator, станд :: istreambuf_iterator, станд :: распределитель сопзЬ & , станд :: input_iterator_tag) () # 14 0x00000000004c281b в станд :: строку и станд :: строка :: _ M_replace_dispatch (__ gnu_cxx :: __ normal_iterator, __gnu_cxx :: __ normal_iterator, станд :: istreambuf_iterator, станд :: istreambuf_iterator, станд :: __ false_type) ( ) # 15 0x00000000004bf225 в readContentFromFile (символ сопз *, станд :: строка &) () Из приведенного выше фрагмента кода, исключение в забросил сгущенного продукта функции. Но я понятия не имею, почему бросить исключение.
LiJunjie
1

голосов
3

ответ
185

Просмотры

Использование указателей в качестве значений для отображения в C ++

У меня есть карта nodeTable, и я пытаюсь выполнить nodeTable [а] = someNode где а типа ЬурейеЕ долго key_t и someNode имеет тип o_t *. Я получаю ошибку сегментации на следующий момент выполнения в stl_function.h: /// Один из @link comparison_functors сравнения функторов @ EndLink. шаблон структура меньше: общественный binary_function {BOOL оператор () (Const _Tp & __x, Const _Tp & __y) сопзЬ {вернуть __x <__y; }}; Исходный код: #include #include #include с помощью патезраса; длинный Key_T определение типа во; ЬурейиЕ структуры tr_n_t {key_t ключ; карта nodeTable; } O_t; INT основных () {o_t * о = (o_t *) таНос (SizeOf (o_t)); о-> nodeTable [1] = о; возвращать 0; } Разве я не пользуясь правом на карту?
MintUser
1

голосов
2

ответ
362

Просмотры

Неисправность Сегментация в рекурсивной функции. Использование станд :: стека (C ++)

Почему я получаю ошибку сегментации и как это исправить? Я пишу код, приведенный ниже, чтобы сортировать рекурсивно «пройти» через лабиринт и найти общее число путей. Я использую стек для отслеживания «следующий шаг». Строки и столбцы определяют размер лабиринта. Если бы я сделать эти параметры больше, чем 9х9 я получаю ошибку сегментации. Я понятия не имею, почему я получаю это. Это первый раз, когда я использовал GDB и получил следующее: # 3 0x0000000000400de0 в станд :: стек :: сверху (это = 0x604400) в /usr/lib/gcc/x86_64-unknown-linux-gnu/4.7.2 /../../../../include/c++/4.7.2/bits/stl_stack.h:161 161 возврата c.back (); Ведущий меня полагать, что это что-то делать со своим стеком. Я признателен за любую помощь. Благодарю. Код: #define РЯДЫ 10 #define КОЛОННЫ 10 #include #include с использованием патезраса; структура х {длинный я; долго J; }; стек баф; длинная goRight (длинный J) {если (J <КОЛОННА-1) возвращает 1; еще возврат 0; } Длинные Godown (длинный я) {если (я <Строк-1) возвращение 1; еще возврат 0; } Длиной хода (ху POS) {длинные Fd = Godown (POS.i); длинный Fr = goRight (POS.j); ху toAdd; если (Fd == 1) {toAdd.i = POS.i + 1; toAdd.j = POS.j; buff.push (toAdd); } Если (Fr == 1) {toAdd.i = POS.i; toAdd.j = POS.j + 1; buff.push (toAdd); } Если (buff.empty ()) возвращает 0; toAdd = buff.top (); buff.pop (); Возвращение (траверс (toAdd) + (Fd * Фр)); } INT основных () {ху начальный; initial.i = 0; initial.j = 0; соиЬ } Длиной хода (ху POS) {длинные Fd = Godown (POS.i); длинный Fr = goRight (POS.j); ху toAdd; если (Fd == 1) {toAdd.i = POS.i + 1; toAdd.j = POS.j; buff.push (toAdd); } Если (Fr == 1) {toAdd.i = POS.i; toAdd.j = POS.j + 1; buff.push (toAdd); } Если (buff.empty ()) возвращает 0; toAdd = buff.top (); buff.pop (); Возвращение (траверс (toAdd) + (Fd * Фр)); } INT основных () {ху начальный; initial.i = 0; initial.j = 0; соиЬ } Длиной хода (ху POS) {длинные Fd = Godown (POS.i); длинный Fr = goRight (POS.j); ху toAdd; если (Fd == 1) {toAdd.i = POS.i + 1; toAdd.j = POS.j; buff.push (toAdd); } Если (Fr == 1) {toAdd.i = POS.i; toAdd.j = POS.j + 1; buff.push (toAdd); } Если (buff.empty ()) возвращает 0; toAdd = buff.top (); buff.pop (); Возвращение (траверс (toAdd) + (Fd * Фр)); } INT основных () {ху начальный; initial.i = 0; initial.j = 0; соиЬ initial.i = 0; initial.j = 0; соиЬ initial.i = 0; initial.j = 0; соиЬ
lamdacore
1

голосов
1

ответ
1.1k

Просмотры

Android native use Qt library

Я использую статическую библиотеку, которая разработана с использованием QT (necessitas). Некоторые вопросы блокировать мою работу, так что я пишу, чтобы попросить несколько советов от вас. Странный вопрос, который я встретил статическую библиотека и libQtCore.so успешно связан с моей Android родной разделяемой библиотекой (которая, составленной с использованием NDK-R8b), но врежется в libQtCore.so. След указывает на то, что libQtCore.so сбой в какой-либо операции STL. Я заметил, что necessitas иметь свою собственную NDK, так что я должен собрать все мой андроид родной библиотеки с помощью NDK из necessitas? Libc ++ / libstdc ++ из necessitas и андроида LIBC ++ / libstdc ++ являются ABI совместимы? Вот авария следа. Большое спасибо. Сигнал 11 (SIGSEGV), код 1 (SEGV_MAPERR), ошибка адр 0000`enter код here`0000 /data/app-lib/com.balabala-1/libQtCore.so (станд :: basic_ostream & станд :: __ ostream_insert (станд ::
user2031207
1

голосов
2

ответ
158

Просмотры

Почему я получаю MAX_SIZE DEQUE (в) меньше, чем max_size вектора ()?

В процессе обучения (и экспериментировать) с STL контейнеров я узнал, что вектор max_size = 4611686018427387903 и Deque max_size = 2305843009213693951 на моей системе (GCC версии 4.7.2, x86_64). Из моих (ограниченные) понимания двусторонних очередей, как правило, реализуются внутренне в виде списка векторов (или вектора векторов?). Если это так, то почему max_size DEQUE в меньшей, чем вектор, который (вектор) на самом деле потребовалось бы непрерывный блок памяти и дека может быть в состоянии работать с несколькими смежными блоками? Есть ли у него что-нибудь сделать с моей конфигурации системы, текущее состояние или это так и должно быть?
lucent
1

голосов
1

ответ
1.4k

Просмотры

C ++ ofstream удаления и очистки

Я пишу C ++ ofstream, что иногда необходимо очистить вверх - файл я пишу должен быть удален, а класс удален и очищен. Как? (За исключением его закрытия и удаления его по имени). (По крайней мере, файл не должен существовать с предполагаемым местоположением и имя файла, с которым он был открыт - каталог временных файлов может быть в порядке)
user1987442
0

голосов
0

ответ
15

Просмотры

сортировка STL контейнера с парой пара

Это мой первый раз с помощью C ++ STL priority_queue (), и я немного запутался об этой конкретной части кода, я наткнулся (но я считаю, что это не имеет ничего общего с рд, и он должен быть применим ко всем контейнерам (вектор, наборы и т.д.)): priority_queue рд; Допустим, у меня есть pq.push_back (make_pair (а, make_pair (Ь, с))). В случае, если столкновение а, тогда правило сравнения распространяется на вторую пару и сортировка будет осуществляться на основе б, а затем с?
Insane Coder
1

голосов
2

ответ
91

Просмотры

Зачем специализированную версию unintialized_copy () для полукокса * и * w_char, но не других примитивных типов?

Вот версия специализация для полукокса *: инлайн символ * uninitialized_copy (Const символ * первый, Const символ * последний, символ * результат) {memmove (результат, первый, последний первый); возвращаемый результат + (последний - первый); } Говорят, что memmove является наиболее эффективным способом для полукокса * и * w_char для реализации этого метода. Но почему не может Int * и другой основной типа быть реализован таким образом?
venus.w
1

голосов
1

ответ
54

Просмотры

Есть ли что-то вроде circular_advance доступен в станд или повысить?

позволяет сказать, что я хочу, чтобы пройти через контейнер в круговом образом: IDX = 0, IDX = 1 .. IDX = размер () - 1, IDX = 0, IDX = 1 ... Есть ли способ сделать с использованием станд или увеличение? Я знаю, что алгоритмы работают в диапазонах не на контейнерах, так что я предполагаю, что Im не повезло, но я просто хотел проверить. PS Нет необходимости в ручной реализации, это тривиально (если вы не забыли о НомерСтарта пунктов: P), просто curr_idx = (curr_idx + 1)% my_cont.size ()
NoSenseEtAl
1

голосов
2

ответ
135

Просмотры

auto_ptr_ref вопросы реализации

Я посмотрел на различных источников в отношении внутренней реализации auto_ptr и auto_ptr_ref. У меня на этот вопрос, что я не мог понять, почему. .... При возврате «auto_ptr» из функции, компилятор считает, что нет подходящей для копирования т е р построить возвращаемый объект. Но есть преобразование в «auto_ptr_ref» и CTOR принимает «» auto_ptr_ref построения «auto_ptr». Таким образом, компилятор создает «auto_ptr_ref», который в основном только содержит ссылку на оригинальный «auto_ptr», а затем строящий «auto_ptr» от этого объекта. Это все (ну, при возврате объекта, компилятор проходит через этот процесс, как правило, в два раза, так как возвращаемое значение копируется где-то, но это не меняет процесс) .... (Ссылка HTTP: //www.josuttis. ком / libbook / auto_ptr.html) В этом примере я эмулировать реализации auto_ptr и auto_ptr_ref и способен генерировать результаты, показывающие, что компилятор действительно проходит через процесс дважды пример имеет следующие основные черты: 1) конструктор копирования A в не берет на константная ссылка. 2) оператор А имеет преобразования B 3) имеет конструктор A (B); класс В {}; класс А {общественности: A () {Е ( "конструктор по умолчанию () @% р \ г \ п", это); } А (В) {Е ( "Конструктор (В) @% р \ г \ п", это); } А (А & а) {Е ( "конструктор копирования (Неконстантный) @% р \ г \ п", это); } Оператор В () {Е ( "А Convertion конструктор (В) @% р \ г \ п", это); вернуться B (); }}; Foo () {возвращают (); } INT основных () {А а (Foo ()); } Таким образом, когда А а (Foo ())) выполняется 1) Foo () генерирует временный объект X 2) X преобразуется к типу B 3) конструктора A (B) используется для построения объекта в этом выводится: конструктор по умолчанию () @ 0xbfea340f конструктор Convertion (B) @ 0xbfea340f конструктора (B) @ 0xbfea344f конструктор Convertion (B) @ 0xbfea344f конструктора (B) @ 0xbfea344e Мы можем видеть, что компилятор вэнь через преобразования-конструкта шаги 2 & 3 раза. Это почему?
ROTOGG
1

голосов
1

ответ
388

Просмотры

NSSet против unordered_set

Я выполнил простое рандомизированное испытание производительности NSSet Какао против unordered_set в STL в. Оба реализованы с использованием хэш-таблицы. Будучи, что C ++ известен своим высокопроизводительного код, я был удивлен, увидев, что NSSet был ~ 1.5x быстрее, чем unordered_set. Может кто-нибудь пролить некоторый свет на то, почему это? PS Тест поиска случайных строк (с помощью NSString для NSSet и basic_string для unordered_set). EDIT: Вот код: https://github.com/fumoboy007/StringCollectionSpeedTest.
fumoboy007
1

голосов
1

ответ
215

Просмотры

Набор basefield к нулю

Я знаю, что basefield маска для разл / октава / шестнадцатеричного, Все, что я хочу, чтобы убрать их с помощью функции SETF потока, но независимо от того, сколько я стараюсь это не правильно, поэтому я написал следующий пример, чтобы помочь мне понять, как флаги внутри выглядят для всех возможных значений basefield. # include с помощью патезраса; ИНТ основной () {ЬурейеЕ ios_base :: fmtflags FMT; FMT A, B, C = cout.basefield; соиЬ
Muhammad Aladdin
1

голосов
1

ответ
77

Просмотры

Как правильно следить за адресами с использованием STL?

Фон у меня есть вектор объектов и индекс (карты) в эти объекты по имени (строка). В моем случае, вектор только растет (пункты никогда не удаляется). Я не знаю этого STRUCT Foo {}; станд :: вектор v; станд :: карта м; // адрес и v [0], & v [1], и т.д ... потому что, как я добавить элементы в V, старые отображения в м могут стать недействительными должны быть v realloc'ed. ВОПРОС Если добавить дополнительный уровень абстракции через станд :: unique_ptr, м будет нормально должно быть realloc'ed v? структура Foo {}; станд :: вектор v; станд :: карта м; // адрес v [0] .get (), V [1] .get (), и т.д ... Я думаю, что ответ да, из-за копирование Пропуска, но я не уверен.
kfmfe04
1

голосов
1

ответ
82

Просмотры

Красное Черное дерево с пагинацией

Поскольку большинство людей знают Set контейнера в C ++ обычно реализуются в виде красно-черного дерева, и при переборе над контейнером запись выходит в порядке, и это может быть использовано. Я бы, однако, хотел бы сделать pagenation на итерации контейнера, forinstance если контейнер containes: комплект комплект; // вставить некоторые данные (авто с: комплект) соиЬ
Martin Kristiansen

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