stl- все статьи тега
C++ STL с jemalloc
Как можно использовать контейнеры STL C++ с jemalloc (или любой другой реализацией malloc)? Так ли это просто, как включить jemalloc/jemalloc.h? Или я должен написать распределитель для них? Edit : приложение, над которым я работаю, выделяет и освобождает относительно небольшие объекты в течение всего срока службы. Я хочу заменить распределитель по умолчанию, потому что тесты показали, что приложение не масштабируется дальше 2 ядер. Профилирование показало, что он ждал выделения памяти, вот и ...
могу ли я использовать std::copy для копирования в stringstream
Недавно у меня был случай, когда я хотел взять необработанные байты значения int64_t в строковый поток. В C++17 я мог бы сделать следующее: uint64_t val = 1984; std::stringstream sstr; sstr << "the byte value is " << std::string_view(reinterpret_cast<char*>(&val), sizeof(decltype(val))); А Боб - твой дядя. Но мне нужно сделать это с помощью C++98, или, может быть, C++11. Я думал сделать следующее: std::copy(reinterpret_cast<const char*>(&tmp_time), ...
reserve () реализация для std:: vector в STL
Рассмотрим эту реализацию std:: vector:: reserve () из книги " Язык программирования C++, 4-е изд., Бьярне Страуструп: template<class T, class A> void vector<T,A>::reserve(size_type newalloc) { if (newalloc<=capacity()) return; vector_base<T,A> b {vb.alloc,newalloc}; // get new storage // (see PS of question for details on vb data member) T* src = elem; // ptr to th ...
Как передать предикат в качестве параметра функции
У меня есть класс CMyVector, который содержит вектор указателей на объекты CMyClass, и у меня есть несколько функций "найти", чтобы найти элементы в соответствии с различными критериями. Так, например, у меня есть: CMyClass* CMyVector::FindByX(int X); CMyClass* CMyVector::FindByString(const CString& str); CMyClass* CMyVector::FindBySomeOtherClass(CSomeOtherClass* ptr); // Other find functions... Сначала они были реализованы в виде петель, пересекающих вектор, ищущих элемент, который соот ...
В чем преимущество std::back inserter над std::inserter?
Насколько я могу судить, везде, где std::back_inserter работает в алгоритме STL, вы можете передать std::inserter, построенный с .end() вместо: std::copy(l.begin(), l.end(), std::back_inserter(dest_list)); std::copy(l.begin(), l.end(), std::inserter(dest_list, dest_list.end())); И, в отличие от back_inserter, насколько я могу судить, inserter работает для любого контейнера STL!! Я попробовал его успешно для std::vector, std::list, std::map, std::unordered_map прежде чем прийти сюда удивленны ...
Функция для вычисления среднего значения массива double [] с помощью accumulate
Это должна быть самая распространенная функция для того, что у каждого где-то есть фрагмент кода, но я на самом деле потратил не менее 1,5 часа на его поиск на SO, а также на других сайтах C++ и не нашел решения. Я хотел бы вычислить среднее значение double array[] с помощью функции. Я хотел бы передать массив функции в качестве ссылки . Есть миллионы примеров, когда среднее вычисляется в цикле main (), но то, что я ищу, - это функция, которую я могу поместить во внешний файл и использовать ...
Почему std:: deque не вектор с памятью, зарезервированной перед индексом 0?
Насколько я понимаю, мотивация deque заключается в том, чтобы предоставить контейнер произвольного доступа с эффективным push_front. Обычно упоминаемые преимущества vector по сравнению с deque включают более быстрый обход и at(), но в основном его совместимость C, так как он гарантирует непрерывную память. ДЭК этого не делает, поскольку он представляет собой набор фрагментов памяти, каждый из которых содержит ряд значений. Я в замешательстве. Почему deque не построен как вектор, но с памятью, ...
Инициализация вектора std::со списком последовательных целых чисел без знака
Я хочу использовать специальный метод для инициализации std::vector<unsigned int>, который описан в книге C++, которую я использую в качестве ссылки (немецкая книга "Der C++ Programmer" Ульриха Бреймана, если это имеет значение). В этой книге есть раздел о типах последовательностей STL, относящийся, в частности, к list, vector и deque. В этом разделе он пишет, что существуют два специальных конструктора таких типов последовательностей, а именно, если Xотносится к такому типу, X(n, t) // ...
Указатели в качестве ключей в карте на C++ в STL
У меня есть вопрос о том, как обрабатываются указатели на пользовательский объект при использовании в качестве ключей в карте. Более конкретно, если я определяю std::map< CustomClass*, int > foo; Будет ли работать реализация C++ по умолчанию для обработки этих указателей? Или мне нужно определить пользовательскую функцию компаратора для ее обработки? Вообще, хорошо ли использовать указатели на объекты в качестве ключей? ...
отодвинуть против установки обратно
Я немного запутался относительно разницы между push_back и emplace_back. void emplace_back(Type&& _Val); void push_back(const Type& _Val); void push_back(Type&& _Val); как есть push_back перегрузка принимая ссылку rvalue я не совсем понимаю, что цель emplace_back будет? ...
В чем разница между "STL" и "стандартной библиотекой C++"?
кто-то принес в этой статье к моему вниманию, что утверждает (я перефразирую) термин STL неправильно используется для обозначения всей стандартной библиотеки C++ вместо частей, которые были взяты из SGI STL. (...) это относится к "STL", несмотря на то, что очень мало людей все еще используют STL (который был разработан в SGI). части стандартной библиотеки C++ были основаны на частях STL, и именно эти части многие люди (в том числе несколько авторов и заведомо ошибочных cplusplus.com) по ...
Как удалить элемент из std:: vector по индексу?
У меня есть std::vector, и я хочу удалить n-й элемент. Как мне это сделать? std::vector<int> vec; vec.push_back(6); vec.push_back(-17); vec.push_back(12); vec.erase(???); ...
Лучший способ извлечь субвектор из вектора?
Предположим, у меня есть std::vector (назовем его myVec) в размере N. Каков самый простой способ построить новый вектор, состоящий из копии элементов X через Y, где 0 myVec [100000] через myVec [100999] в векторе размере 150000. если это не может быть сделано эффективно с вектором, есть ли другой тип данных STL, который я должен использовать вместо этого? ...
Зачем использовать итераторы вместо индексов массива?
принять следующие две строки кода: for (int i = 0; i < some_vector.size(); i++) { //do stuff } и так: for (some_iterator = some_vector.begin(); some_iterator != some_vector.end(); some_iterator++) { //do stuff } мне сказали, что второй способ предпочтительнее. Почему именно это происходит? ...
Сортировка вектора пользовательских объектов
Как происходит сортировка вектора, содержащего пользовательские (т. е. определенные пользователем) объекты. Наверное, стандартный алгоритм STL вроде наряду с предикатом (функция или объект функции), который будет работать на одном из полей (в качестве ключа для сортировки) в пользовательском объекте должны быть использованы. Я на правильном пути? ...
Как напечатать элементы вектора C++ в GDB?
Я хочу изучить содержание std::vector в GDB, как мне это сделать? Допустим, это std::vector<int> для простоты. ...
Как суммировать элементы вектора C++?
Что такое хороший способы нахождения суммы всех элементов std::vector? Предположим у меня есть вектор std::vector<int> vector с несколькими элементами в нем. Теперь я хочу найти сумму всех элементов. Каковы различные способы для одного и того же? ...
Зачем использовать функции begin и end, не являющиеся членами, в C++11?
каждый стандартный контейнер имеет begin и end метод возврата итераторов для этого контейнера. Однако C++11, по-видимому, ввел свободные функции под названием std::begin и std::end, которую называют begin и end функции-члены. Итак, вместо того, чтобы писать auto i = v.begin(); auto e = v.end(); ты бы написал using std::begin; using std::end; auto i = begin(v); auto e = end(v); в своем выступлении, Написание Современного C++, Херб Саттер говорит, что вы всегда должны использовать бесплатный ...
Как преобразовать wstring в строку?
вопрос в том, как преобразовать wstring в string? у меня есть следующий пример : #include <string> #include <iostream> int main() { std::wstring ws = L"Hello"; std::string s( ws.begin(), ws.end() ); //std::cout <<"std::string = "<<s<<std::endl; std::wcout<<"std::wstring = "<<ws<<std::endl; std::cout <<"std::string = "<<s<<std::endl; } вывод с закомментированной строкой: std::string = Hello s ...
Ты не должен наследовать от std:: vector
хорошо, это действительно трудно признаться, но у меня есть сильное искушение в данный момент, чтобы унаследовать от std::vector. мне нужно около 10 настраиваемых алгоритмов для вектора, и я хочу, чтобы они были непосредственно членами вектора. Но, естественно, я хочу также иметь остальную часть 'ы. Ну, моя первая идея, как законопослушного гражданина, состояла в том, чтобы иметь std::vector член MyVector класса. Но тогда мне пришлось бы вручную перепрофилировать весь интерфейс std::vector. То ...