Pytania otagowane jako c++-standard-library

W języku programowania C ++ biblioteka standardowa C ++ to zbiór klas i funkcji, które mogą, ale nie muszą być napisane w języku podstawowym i są częścią C ++





8
Usuwanie elementów ze std :: set podczas iteracji
Muszę przejść przez zestaw i usunąć elementy, które spełniają predefiniowane kryteria. Oto kod testowy, który napisałem: #include <set> #include <algorithm> void printElement(int value) { std::cout << value << " "; } int main() { int initNum[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }; std::set<int> …


2
Jaka jest mechanika optymalizacji krótkich ciągów znaków w libc ++?
Ta odpowiedź daje ładny, ogólny przegląd optymalizacji krótkich ciągów (SSO). Chciałbym jednak dowiedzieć się bardziej szczegółowo, jak to działa w praktyce, szczególnie w implementacji libc ++: Jak krótki musi być ciąg znaków, aby kwalifikować się do logowania jednokrotnego? Czy to zależy od docelowej architektury? W jaki sposób implementacja rozróżnia krótkie …



1
Dlaczego wektor libc ++ <bool> :: const_reference nie jest bool?
Sekcja 23.3.7 Klasa vector&lt;bool&gt;[vector.bool], akapit 1 stwierdza: template &lt;class Allocator&gt; class vector&lt;bool, Allocator&gt; { public: // types: typedef bool const_reference; ... Jednak ten program nie kompiluje się podczas korzystania z libc ++: #include &lt;vector&gt; #include &lt;type_traits&gt; int main() { static_assert(std::is_same&lt;std::vector&lt;bool&gt;::const_reference, bool&gt;{}, "?"); } Ponadto zauważam, że standard C ++ był …

4
Czy eksperymentalne cechy nowoczesnego C ++ są niezawodne w długoterminowych projektach?
Mam projekt, który obecnie używa C ++ 11/14, ale wymaga czegoś takiego std::filesystem, co jest dostępne tylko w C ++ 17, stąd nie mam szansy, aby go obecnie używać. Widzę jednak, że jest dostępny w moim obecnym kompilatorze jako std::experimental::filesystem. Czy warto korzystać z funkcji eksperymentalnych, zakładając, że w przyszłości …

9
Dlaczego w standardowej bibliotece C ++ nie ma transform_if?
Przypadek użycia pojawił się, gdy chcieliśmy wykonać kopię warunkową (1. wykonalna z copy_if), ale z kontenera wartości do kontenera wskaźników do tych wartości (2. wykonalne z transform). Z dostępnymi narzędziami nie mogę tego zrobić w mniej niż dwóch krokach: #include &lt;vector&gt; #include &lt;algorithm&gt; using namespace std; struct ha { int …

2
Dlaczego operator! = Usunięto w C ++ 20 dla wielu standardowych typów bibliotek?
Zgodnie z cppreference , std::type_info::operator!=zostaje usunięty z C ++ 20, jednak std::type_info::operator==najwyraźniej pozostaje. Jakie jest uzasadnienie? Mógłbym się zgodzić na to, że porównywanie nierówności byłoby pozbawione sensu, ale wtedy porównywanie dla równości byłoby równie samo pozbawione znaczenia, prawda? Podobnie, operator!=wiele innych standardowych typów bibliotek, w tym kontenery takie jak std::unordered_map::operator!=i …


2
Dlaczego `std :: string :: find ()` nie zwraca iteratora końcowego w przypadku awarii?
Uważam zachowanie std::string::find jest niespójne ze standardowymi kontenerami C ++. Na przykład std::map&lt;int, int&gt; myMap = {{1, 2}}; auto it = myMap.find(10); // it == myMap.end() Ale dla sznurka std::string myStr = "hello"; auto it = myStr.find('!'); // it == std::string::npos Dlaczego zamiast nieudanego myStr.find('!')powrotu ?myStr.end()std::string::npos Ponieważ std::stringjest to coś …

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.