Articles of stl

Como faço para imprimir os elementos de um vetor C ++ no GDB?

Eu quero examinar o conteúdo de um std::vector no GDB, como faço isso? Vamos dizer que é um std::vector por uma questão de simplicidade.

Chaves de ponto flutuante em std: map

O seguinte código deve encontrar a chave 3.0 em um std::map que existe. Mas, devido à precisão do ponto flutuante, não será encontrado. map mymap; mymap[3.0] = 1.0; double t = 0.0; for(int i = 0; i 0); } No exemplo acima, contains sempre será false . Minha solução atual é apenas multiplicar t por […]

É razoável usar std :: basic_string como um buffer contíguo ao direcionar C ++ 03?

Eu sei que, em C ++ 03, tecnicamente, o modelo std::basic_string não precisa ter memory contígua. No entanto, estou curioso para saber quantas implementações existem para os compiladores modernos que realmente aproveitam essa liberdade. Por exemplo, se alguém quiser usar basic_string para receber os resultados de alguma API C (como no exemplo abaixo), parece bobagem […]

Determine se um tipo é um contêiner STL em tempo de compilation

Eu gostaria de escrever um modelo que determinará se um tipo é um contêiner stl em tempo de compilation. Eu tenho o seguinte pedaço de código: struct is_cont{}; struct not_cont{}; template struct is_cont { typedef not_cont result_t; }; mas não sei como criar as especializações necessárias para std::vector, deque, set etc …

O método std :: list :: remove destrói a chamada de cada elemento removido?

std::list lst; //…. Node * node = /* get from somewhere pointer on my node */; lst.remove(node); O std :: list :: remove método de destruição de chamada (e memory livre) de cada elemento removido? Se sim, como posso evitar isso?

Como implodir um vetor de strings em uma string (a maneira elegante)

Estou procurando a maneira mais elegante de implodir um vetor de strings em uma string. Abaixo está a solução que estou usando agora: static std::string& implode(const std::vector& elems, char delim, std::string& s) { for (std::vector::const_iterator ii = elems.begin(); ii != elems.end(); ++ii) { s += (*ii); if ( ii + 1 != elems.end() ) { […]

Por que não podemos declarar um std :: vector ?

Tendo passado algum tempo desenvolvendo em C #, notei que se você declara uma class abstrata com o propósito de usá-la como uma interface, não é possível instanciar um vetor dessa class abstrata para armazenar instâncias das classs filhas. #pragma once #include #include using namespace std; class IFunnyInterface { public: virtual void IamFunny() = 0; […]

É list :: size () realmente O (n)?

Recentemente, notei algumas pessoas mencionando que std::list::size() tem uma complexidade linear. De acordo com algumas fonts , isso é de fato dependente da implementação, pois o padrão não diz qual deve ser a complexidade. O comentário nesta input do blog diz: Na verdade, depende de qual STL você está usando. Microsoft Visual Studio V6 implementa […]

O que é mais rápido, iterando um vetor STL com vetor :: iterador ou com at ()?

Em termos de desempenho, o que funcionaria mais rápido? Existe alguma diferença? É dependente da plataforma? //1. Using vector::iterator: vector vs = GetVector(); for(vector::iterator it = vs.begin(); it != vs.end(); ++it) { *it = “Am I faster?”; } //2. Using size_t index: for(size_t i = 0; i < vs.size(); ++i) { //One option: vs.at(i) = […]

Diferença entre apagar e remover

Estou um pouco confuso sobre a diferença entre o uso do algoritmo std :: remove. Especificamente, não consigo entender o que está sendo removido quando uso esse algoritmo. Eu escrevi um pequeno código de teste como este: std::vector a; a.push_back(1); a.push_back(2); std::remove(a.begin(), a.end(), 1); int s = a.size(); std::vector::iterator iter = a.begin(); std::vector::iterator endIter = […]