Pytania otagowane jako stl

Standardowa biblioteka szablonów (STL) to biblioteka C ++ zawierająca ogólne kontenery, iteratory, algorytmy i obiekty funkcji. Kiedy C ++ został znormalizowany, duże części STL zostały zaadoptowane do Biblioteki Standardowej, a te części w Bibliotece Standardowej są czasami błędnie określane zbiorczo jako „STL”.

5
Jak korzystać z priorytetowej kolejki STL dla obiektów?
class Person { public: int age; }; Chcę przechowywać obiekty klasy Person w kolejce priorytetowej. priority_queue< Person, vector<Person>, ??? > Myślę, że muszę zdefiniować klasę do porównania, ale nie jestem tego pewien. Kiedy piszemy, priority_queue< int, vector<int>, greater<int> > Jak działa większy?
80 c++  stl 

7
Wyjątek c ++: rzucanie std :: string
Chciałbym zgłosić wyjątek, gdy moje metody C ++ napotykają coś dziwnego i nie mogą odzyskać. Czy można rzucać std::stringwskaźnikiem? Oto, czego nie mogłem się doczekać: void Foo::Bar() { if(!QueryPerformanceTimer(&m_baz)) { throw new std::string("it's the end of the world!"); } } void Foo::Caller() { try { this->Bar(); // should throw } …
80 c++  exception  stl 


10
jak zainicjować 'const std :: vector <T>' jak tablica ac
Czy jest eleganckim sposobem tworzenia i zainicjować const std::vector&lt;const T&gt;podobny const T a[] = { ... }do stałej (i małych) liczba wartości? Muszę często wywoływać funkcję, która oczekuje a vector&lt;T&gt;, ale te wartości nigdy się nie zmienią w moim przypadku. W zasadzie pomyślałem o czymś takim namespace { const std::vector&lt;const …
79 c++  stl 

4
Kontener STL z określonym typem jako argument ogólny
Czy jest jakiś sposób, w jaki mogę stworzyć funkcję, która przyjmuje kontener określonego typu (powiedzmy std::string) jako parametr void foo(const std::container&lt;std::string&gt; &amp;cont) { for(std::string val: cont) { std::cout &lt;&lt; val &lt;&lt; std::endl; } } i nazwać to dla każdego typu kontenera STL jako dane wejściowe? jak wyżej? std::set&lt;std::string&gt; strset; std::vector&lt;std::string&gt; …

4
Czy można używać std :: transform z std :: back_inserter?
Cppreference ma ten przykładowy kod dla std::transform: std::vector&lt;std::size_t&gt; ordinals; std::transform(s.begin(), s.end(), std::back_inserter(ordinals), [](unsigned char c) -&gt; std::size_t { return c; }); Ale mówi również: std::transformnie gwarantuje zastosowania unary_oplub binary_op. Aby zastosować funkcję do sekwencji w kolejności lub zastosować funkcję, która modyfikuje elementy sekwencji, użyj std::for_each. Ma to prawdopodobnie umożliwić równoległe …

3
Sposób kompilacji w celu ustalenia najtańszego typu argumentu
Mam szablon, który wygląda tak template &lt;typename T&gt; class Foo { public: Foo(const T&amp; t) : _t(t) {} private: const T _t; }; Czy istnieje sprytny sposób metaprogramowania szablonów, aby uniknąć używania stałej referencji w przypadkach, gdy typ argumentu jest trywialny, jak bool lub char? lubić: Foo(stl::smarter_argument&lt;T&gt;::type t) : _t(t) …
15 c++  stl 

2
Jak wektor jako klucz działa wewnętrznie w C ++?
Ta odpowiedź SO mówi, że mapa STL z wektorem dla klucza wektor może być używany jako klucz. Więc kiedy używamy wektora jako klucza. Jak to faktycznie działa, skoro klucz musi być unikalny, więc kiedy wstawimy inny wektor z tymi samymi elementami, czy mapsprawdzanie duplikatu elementu po elemencie lub nazwa wektora …
14 c++  arrays  dictionary  vector  stl 

1
Czy `string.assign (string.data (), 5)` jest dobrze zdefiniowany czy UB?
Współpracownik chciał to napisać: std::string_view strip_whitespace(std::string_view sv); std::string line = "hello "; line = strip_whitespace(line); Powiedziałem, że powrót string_viewsprawił, że poczułem niepokój a priori , a ponadto aliasing tutaj wyglądał dla mnie jak UB. Mogę z całą pewnością stwierdzić, że line = strip_whitespace(line)w tym przypadku jest to odpowiednik line = …

3
Czy mogę używać std :: transform w miejscu z równoległą polityką wykonywania?
Jeśli się nie mylę, mogę wykonać std::transformdziałanie w miejscu , używając tego samego zakresu co iterator wejściowy i wyjściowy. Załóżmy, że mam jakiś std::vectorprzedmiot vec, a potem napiszę std::transform(vec.cbegin(),vec.cend(),vec.begin(),unary_op) przy użyciu odpowiedniej operacji jednoargumentowej unary_op. Korzystając ze standardu C ++ 17, chciałbym wykonać transformację równolegle, wstawiając std::execution::partam jako pierwszy argument. …

1
Wyciek pamięci podczas unordered_map :: wstaw wyjątek KeyEqual z GCC - przełamanie silnej gwarancji bezpieczeństwa wyjątku?
Korzystam z GCC 7.3.1, ale testowałem również na coliru, które moim zdaniem to wersja 9.2.0. Kompiluj za pomocą: g++ -fsanitize=address -fno-omit-frame-pointer rai.cpp Oto rai.cpp: #include &lt;iostream&gt; #include &lt;unordered_map&gt; int main() { try { struct MyComp { bool operator()(const std::string&amp;, const std::string&amp;) const { throw std::runtime_error("Nonono"); } }; std::unordered_map&lt;std::string, std::string, std::hash&lt;std::string&gt;, …
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.