«stl» etiketlenmiş sorular

Standart Şablon Kütüphanesi veya STL, genel kapsayıcılar, yineleyiciler, algoritmalar ve işlev nesnelerinin bir C ++ kütüphanesidir. C ++ standartlaştırıldığında, STL'nin büyük kısımları Standart Kitaplığa kabul edildi ve Standart Kitaplıktaki bu kısımlara bazen hatalı olarak topluca "STL" denir.

7
Neden bir std :: vector <AbstractClass> bildiremiyoruz?
C # 'da geliştirmek için epey bir zaman harcadıktan sonra, onu bir arayüz olarak kullanmak amacıyla soyut bir sınıf bildirirseniz, çocuk sınıflarının örneklerini saklamak için bu soyut sınıfın bir vektörünü başlatamayacağınızı fark ettim. #pragma once #include &lt;iostream&gt; #include &lt;vector&gt; using namespace std; class IFunnyInterface { public: virtual void IamFunny() = …

3
sınıfım için nasıl takas işlevi sağlayabilirim?
swapSTL algoritmalarımı etkinleştirmenin doğru yolu nedir ? 1) Üye swap. Mu std::swapüyesini kullanmak SFINAE hile kullanmak swap. 2) swapAynı isim alanında serbest duruş . 3) Kısmi uzmanlaşma std::swap. 4) Yukarıdakilerin tümü. Teşekkür ederim. DÜZENLEME: Görünüşe göre sorumu açıkça ifade etmedim. Temel olarak, bir şablon sınıfım var ve o sınıf için …
89 c++  algorithm  stl  swap 

10
Neden vektörü kullanarak deque
Dan beri her ikisi de bitişik bellek kapsayıcılarıdır; özellik açısından deque, vektörün sahip olduğu hemen hemen her şeye ama daha fazlasına sahiptir, çünkü öne yerleştirmek daha verimlidir. Neden whould kimse tercih std::vectoretmek std::deque?
87 c++  stl  vector  deque 

12
Harita değerlerini STL'deki vektöre kopyala
Şu anda Etkili STL ile yoluma devam ediyorum. Madde 5, genellikle aralık üye işlevlerini tek öğeli emsallerine göre kullanmanın tercih edildiğini göstermektedir. Şu anda bir haritadaki tüm değerleri (yani - anahtarlara ihtiyacım yok) bir vektöre kopyalamak istiyorum. Bunu yapmanın en temiz yolu nedir?
86 c++  stl  containers 

15
vektörü artan sayılarla doldurmak için std :: fill kullanın
Bir vector&lt;int&gt;kullanarak doldurmak istiyorum std::fill, ancak bir değer yerine vektör, daha sonra artan sırada sayılar içermelidir. Bunu, fonksiyonun üçüncü parametresini birer birer yineleyerek başarmayı denedim, ancak bu bana sadece 1 veya 2 ile dolu vektörleri ( ++operatörün konumuna bağlı olarak) verirdi . Misal: vector&lt;int&gt; ivec; int i = 0; std::fill(ivec.begin(), …
85 c++  stl 

6
Neden std :: get_temporary_buffer'a ihtiyacım var?
Ne amaçla kullanmalıyım std::get_temporary_buffer? Standart şunları söylüyor: N bitişik T nesnesine kadar depolamaya yetecek depolama için bir işaretçi elde eder. Tamponun yığın üzerinde tahsis edileceğini düşündüm, ancak bu doğru değil. C ++ Standardına göre bu tampon aslında geçici değildir. Bu fonksiyonun ::operator new, nesneleri oluşturmayan global fonksiyona göre ne gibi …

8
Std :: multiset'te, bir öğe bulunursa yalnızca bir örneği (tek veya çift) silmek için bir işlev veya algoritma var mı
Belki de bu bir kopya ama arama yapan bir şey bulamadım: Çağrıldığında erase(value), std::multisetbulunan değere sahip tüm elemanlar silinir. Aklıma gelen tek çözüm şudur: std::multiset&lt;int&gt;::iterator hit(mySet.find(5)); if (hit!= mySet.end()) mySet.erase(hit); Sorun değil ama daha iyi olabileceğini düşündüm. Herhangi bir fikir ?
83 c++  stl  multiset 


4
Genel bir bağımsız değişken olarak belirli bir türe sahip STL kapsayıcısı
Ben std::stringparametre olarak belirli bir tip (diyelim ) ile bir kap alır bir işlevi yapmak herhangi bir yolu var mı 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; } } ve her stl konteyneri için girdi olarak çağır? yukarıdaki gibi? std::set&lt;std::string&gt; strset; std::vector&lt;std::string&gt; strvec; …

4
Std :: dönüşümü std :: back_inserter ile kullanmak geçerli midir?
Cppreference için şu örnek kod vardır 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; }); Ancak şunu da söylüyor: std::transformunary_opveya 'nın siparişe göre uygulanmasını garanti etmez binary_op. Bir diziye sırayla bir işlev uygulamak veya bir dizinin öğelerini değiştiren bir işlevi uygulamak için kullanın std::for_each. …

3
En ucuz argüman türünü belirlemenin derleme zamanı yolu
Şuna benzeyen bir şablonum var template &lt;typename T&gt; class Foo { public: Foo(const T&amp; t) : _t(t) {} private: const T _t; }; Argüman türünün bool veya char gibi önemsiz olduğu durumlarda const referansı kullanmaktan kaçınmak için anlayışlı bir şablon metaprogramlama yolu var mı? sevmek: Foo(stl::smarter_argument&lt;T&gt;::type t) : _t(t) {}
15 c++  stl 

2
Anahtar olarak bir vektör C ++ içinde dahili olarak nasıl çalışır?
Bu SO cevapları Anahtar için Vector ile STL Haritasının vektörün anahtar olarak kullanılabileceğini söylüyor. Yani bir vektörü anahtar olarak kullandığımızda. Anahtarın benzersiz olması gerektiğinden, bu gerçekten nasıl çalışır, bu yüzden aynı öğelerle başka bir vektör eklediğimizde, mapöğeye göre yinelenen öğe olup olmadığını kontrol edecek veya vektörün adı bir şey belirleyecek …
14 c++  arrays  dictionary  vector  stl 

1
`String.assign (string.data (), 5)` iyi tanımlanmış mı yoksa UB mi?
Bir iş arkadaşı şunu yazmak istedi: std::string_view strip_whitespace(std::string_view sv); std::string line = "hello "; line = strip_whitespace(line); Ben dönen söyledi string_viewbeni huzursuz yapılan önsel , ve dahası, örtüşme burada bana UB benziyordu. line = strip_whitespace(line)Bu durumda eşdeğer olduğunu kesin olarak söyleyebilirim line = std::string_view(line.data(), 5). Buna string::operator=(const T&amp;) [with T=string_view]eşdeğer …

3
Paralel yürütme ilkesi ile yerinde std :: transform kullanabilir miyim?
Yanılmıyorsam, bir giriş ve çıkış yineleyicisi ile aynı aralığı kullanarak yerindestd::transform performans gösterebilirim . Bazı nesnelerim olduğunu varsayalım , o zaman yazardımstd::vectorvec std::transform(vec.cbegin(),vec.cend(),vec.begin(),unary_op) uygun bir tekli işlem kullanarak unary_op. C ++ 17 standardını kullanarak, std::execution::parilk argüman olarak oraya yapıştırarak dönüşümü paralel olarak yürütmek istiyorum . Bu, fonksiyonun cppreference makalesindestd::transform aşırı …

1
Unordered_map :: sırasında bellek sızıntısı
GCC 7.3.1 kullanıyorum, ancak 9.2.0 sürümü olduğuna inandığım coliru üzerinde de test yaptım. Aşağıdakilerle derleyin: g++ -fsanitize=address -fno-omit-frame-pointer rai.cpp İşte 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;, MyComp&gt; mymap; mymap.insert(std::make_pair("Hello", …
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.