Articles of stl

Como converter wstring em string?

A questão é como converter wstring em string? Eu tenho o próximo exemplo: #include #include 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; } a saída com a linha comentada é: std::string = Hello std::wstring = Hello std::string = Hello […]

Como eu especifico um ponteiro para uma function sobrecarregada?

Eu quero passar uma function sobrecarregada para o algoritmo std::for_each() . Por exemplo, class A { void f(char c); void f(int i); void scan(const std::string& s) { std::for_each(s.begin(), s.end(), f); } }; Eu esperaria que o compilador resolvesse f() pelo tipo de iterador. Aparentemente, o GCC 4.1.2 não faz isso. Então, como posso especificar qual […]

Classificação de C ++ e controle de índices

Usando C ++, e espero que a biblioteca padrão, eu quero classificar uma seqüência de amostras em ordem crescente, mas também quero lembrar os índices originais das novas amostras. Por exemplo, eu tenho um conjunto, ou vetor, ou matriz de amostras A : [5, 2, 1, 4, 3] . Eu quero classificar estes para ser […]

Por que não posso push_back um unique_ptr em um vetor?

O que há de errado com este programa? #include #include int main() { std::vector<std::unique_ptr> vec; int x(1); std::unique_ptr ptr2x(&x); vec.push_back(ptr2x); //This tiny command has a vicious error. return 0; } O erro: In file included from c:\mingw\bin\../lib/gcc/mingw32/4.5.0/include/c++/mingw32/bits/c++allocator.h:34:0, from c:\mingw\bin\../lib/gcc/mingw32/4.5.0/include/c++/bits/allocator.h:48, from c:\mingw\bin\../lib/gcc/mingw32/4.5.0/include/c++/memory:64, from main.cpp:6: c:\mingw\bin\../lib/gcc/mingw32/4.5.0/include/c++/bits/unique_ptr.h: In member function ‘void __gnu_cxx::new_allocator::construct(_Tp*, const _Tp&) [with _Tp = std::unique_ptr, […]

Como faço para passar com segurança objects, especialmente objects STL, para e de uma DLL?

Como faço para passar objects de class, especialmente objects STL, para e de uma DLL de C ++? Meu aplicativo tem que interagir com plug-ins de terceiros na forma de arquivos DLL, e não posso controlar com qual compilador esses plug-ins são criados. Estou ciente de que não há garantia de ABI para objects STL […]

Por que usar iteradores em vez de índices de array?

Pegue as duas linhas de código a seguir: for (int i = 0; i < some_vector.size(); i++) { //do stuff } E isto: for (some_iterator = some_vector.begin(); some_iterator != some_vector.end(); some_iterator++) { //do stuff } Me disseram que o segundo caminho é o preferido. Por que exatamente isso é?

Como sobrecarregar std :: swap ()

std::swap() é usado por muitos contêineres std (como std::list e std::vector ) durante a ordenação e até atribuição. Mas a implementação std de swap() é muito generalizada e bastante ineficiente para tipos personalizados. Assim, a eficiência pode ser obtida sobrecarregando std::swap() com uma implementação específica do tipo customizado. Mas como você pode implementá-lo para que […]

Quais são as garantias de complexidade dos contêineres padrão?

Aparentemente 😉 os containers padrão fornecem alguma forma de garantia. Que tipo de garantias e quais são exatamente as diferenças entre os diferentes tipos de contêineres? Trabalhando a partir da página da SGI (sobre o STL ) eu descobri isso: Container Types: ================ Container: Forward Container Reverse Container Random Access Container Sequence Front Insert Sequence […]

O que acontece se você chamar erase () em um elemento do mapa enquanto iterar do início ao fim?

No código a seguir, faço um loop em um mapa e teste se um elemento precisa ser apagado. É seguro apagar o elemento e manter a iteração ou preciso coletar as chaves em outro recipiente e fazer um segundo loop para chamar o erase ()? map::iterator pm_it; for (pm_it = port_map.begin(); pm_it != port_map.end(); pm_it++) […]

A atualização do conjunto de C ++ STL é tediosa: não consigo alterar um elemento no lugar

Eu acho a operação de atualização no set tedioso, já que não há uma API como essa na cppreference . Então o que eu faço atualmente é sth assim: //find element in set by iterator Element copy = *iterator; … // update member value on copy, varies Set.erase(iterator); Set.insert(copy); Basicamente, o iterador retornado por Set […]