stl- все статьи тега ➜ страница 2
Что на самом деле-это очереди в STL?
Я смотрел на контейнеры STL и пытался понять, что они на самом деле (т. е. используемая структура данных), а deque остановил меня: сначала я подумал, что это двойной связанный список, который позволит вставлять и удалять с обоих концов в постоянное время, но меня беспокоит обещание С помощью оператора [] должно быть сделано в постоянное время. В связанном списке произвольный доступ должен быть O (n), верно? и если это динамический массив, как может это добавить элементы в постоянное время? Сле ...
Преимущества СТД::для каждого сверх для петли
есть ли какие-либо преимущества std::for_each over for петли? Ко мне,std::for_each только кажется, что мешает читабельности кода. Почему же тогда некоторые стандарты кодирования рекомендуют его использование? ...
максимальное значение int
есть ли какой-либо код, чтобы найти максимальное значение integer (соответственно компилятору) в C/C++, например Integer.MaxValue функция в java? ...
C++ valarray против вектора
Мне очень нравятся векторы. Они ловкие и быстрые. Но я знаю, что такая вещь существует valarray. Почему я должен использовать valarray вместо вектора? Я знаю, что у valarrays есть некоторый синтаксический сахар, но кроме этого, когда они полезны? ...
Когда векторы выделяются, они используют память в куче или стеке?
все ли следующие утверждения верны? vector<Type> vect; //allocates vect on stack and each of the Type (using std::allocator) also will be on the stack vector<Type> *vect = new vector<Type>; //allocates vect on heap and each of the Type will be allocated on stack vector<Type*> vect; //vect will be on stack and Type* will be on heap. как память выделяется внутренне для Type на vector или любой другой контейнер STL? ...
Почему вектор C++ называется вектором?
вопрос довольно очевидно на самом деле. Я смутно знаю о векторах в математике, но я действительно не вижу связи с векторами C++. ...
быстрый способ скопировать один вектор в другой
Я предпочитаю два способа: void copyVecFast(const vec<int>& original) { vector<int> newVec; newVec.reserve(original.size()); copy(original.begin(),original.end(),back_inserter(newVec)); } void copyVecFast(vec<int>& original) { vector<int> newVec; newVec.swap(original); } Как вы это делаете? ...
Как удалить элемент из вектора stl с определенным значением?
Я смотрел документацию API для STL vector и заметил, что в классе vector не было метода, который позволял бы удалять элемент с определенным значением. Это похоже на обычную операцию, и кажется странным, что нет встроенного способа сделать это. ...
Как отсортировать вектор пар на основе второго элемента пары?
Если у меня есть вектор пар: std::vector<std::pair<int, int> > vec; есть ли и простой способ сортировки списка в порядке возрастания на основе второго элемента пары? Я знаю, что могу написать небольшой объект функции, который будет выполнять работу, но есть ли способ использовать существующие части STL и std::less сделать работу сразу? EDIT: я понимаю, что могу написать отдельную функцию или класс, чтобы перейти к третьему аргументу для сортировки. Вопрос могу ли я построить ег ...
Написание собственного контейнера STL
существуют ли рекомендации о том, как следует писать новый контейнер, который будет вести себя как любой STL контейнер? ...
В чем разница между итератором const и неконстантным итератором в C++ STL?
в чем разница между const_iterator и iterator и где бы вы использовать один над другим? ...
Как безопасно передавать объекты, особенно объекты STL, в DLL и из нее?
Как передать объекты класса, особенно объекты STL, в библиотеку DLL C++ и из нее? мое приложение должно взаимодействовать со сторонними плагинами в виде DLL-файлов, и я не могу контролировать, с каким компилятором эти плагины построены. Я знаю, что нет гарантированного ABI для объектов STL, и я обеспокоен тем, что вызывает нестабильность в моем приложении. ...
Где я могу получить "полезный" алгоритм двоичного поиска C++?
мне нужен алгоритм двоичного поиска, совместимый с контейнерами C++ STL, что-то вроде std::binary_search в стандартной библиотеке <algorithm> заголовок, но мне нужно, чтобы он возвращал итератор, который указывает на результат, а не простое логическое значение, сообщающее мне, Существует ли элемент. (на боковой ноте, что, черт возьми, думал стандартный комитет, когда они определили API для binary_search?!) моя главная задача здесь заключается в том, что мне нужна скорость бинарного поиск ...
Является ли цикл " for " на основе диапазона устаревшим для многих простых алгоритмов?
алгоритм решения: std::generate(numbers.begin(), numbers.end(), rand); Range-based for-loop solution: for (int& x : numbers) x = rand(); почему я хочу использовать более подробный std::generate на основе диапазона для циклов в C++11? ...
Почему std::stack использует std:: deque по умолчанию?
поскольку для использования контейнера в стеке требуются только следующие операции: обратно() push_back () pop_back () Почему-контейнер по умолчанию для него в начале очереди, а не вектор? разве перераспределения deque не дают буфер элементов перед front (), так что push_front() является эффективной операцией? Не зря эти элементы, поскольку они никогда не будут использоваться в контексте стек? Если нет накладных расходов для использования deque таким образом вместо вектора, почему по умолч ...
Как выбрать между картой и неупорядоченной картой?
предположим, я хотел бы сопоставить данные со строкой в качестве ключа. Какой контейнер я должен был выбрать,map или unordered_map? unordered_map занимает больше памяти, поэтому предположим, что память не является проблемой, и проблемой является скорость. unordered_map обычно должно давать среднюю сложность O(1) с наихудшим случаем O (n). В каких случаях он попадет в O(n)? Когда map получить более эффективное время, чем unordered_map? Это происходит, когда n мало? предполагая, что я буду испол ...
Что такое std::atomic?
Я понимаю, что std::atomic<> является атомарным объектом. Но атомный до какой степени? В моем понимании операция может быть атомной. Что именно подразумевается под атомизацией объекта? Например, если есть два потока одновременно выполнив следующий код: a = a + 12; тогда вся операция (скажем add_twelve_to(int)) атомный? Или изменения, внесенные в переменную atomic (so operator=())? ...
C++ преобразование вектора в вектор
Что такое хороший чистый способ преобразования std::vector<int> intVec до std::vector<double> doubleVec. Или, в более общем плане, преобразовать два вектора конвертируемых типов? ...
Начальная емкость вектора в C++
что такое capacity() на std::vector который создается с помощью конструктора по умолчанию? Я знаю, что size() - это ноль. Можно ли утверждать, что построенный по умолчанию вектор не вызывает выделение памяти кучи? таким образом, можно было бы создать массив с произвольным резервом, используя одно выделение, например std::vector<int> iv; iv.reserve(2345);. Допустим, что по какой-то причине я не хочу начинать size() на 2345. например, в Linux (g++ 4.4.5, ядро 2.6.32 amd64) #include <io ...
Какие требования должны соответствовать классам ключей std::map, чтобы быть действительными ключами?
Я хочу сопоставить объекты данного класса с объектами другого. Класс, который я хочу использовать в качестве ключа, однако, не был написан мной и является простым struct с несколькими значениями. std:: map orders это содержимое, и мне было интересно, как оно это делает, и если любой произвольный класс может быть использован в качестве ключа или если есть набор требований (операторы и что нет), которые должны быть определены. Если это так, я мог бы создать оболочку для класса, реализующего испол ...