Articles of stl

Desempenho relativo de std :: vector vs. std :: list vs. std :: slist?

Para uma lista encadeada simples na qual o access random a elementos de lista não é um requisito, existe alguma vantagem significativa (desempenho ou não) no uso de std::list vez de std::vector ? Se a passagem para trás é necessária, seria mais eficiente usar std::slist e reverse() a lista antes de iterar sobre seus elementos?

Onde posso obter um algoritmo de pesquisa binária “útil” em C ++?

Eu preciso de um algoritmo de busca binária que seja compatível com os contêineres C ++ STL, algo como std::binary_search no header da biblioteca padrão, mas eu preciso retornar o iterador que aponta para o resultado, não um booleano simples me dizendo se o elemento existir. (Em uma nota lateral, o que diabos foi o […]

Por que usar funções de início e fim de não membro no C ++ 11?

Cada contêiner padrão possui um método de begin e end para retornar os iteradores para esse contêiner. Entretanto, o C ++ 11 aparentemente introduziu funções livres chamadas std::begin e std::end que chamam as funções de membro begin e end . Então, ao invés de escrever auto i = v.begin(); auto e = v.end(); você escreveria […]

Por que usar functores sobre funções?

Comparar double average = CalculateAverage(values.begin(), values.end()); com double average = std::for_each(values.begin(), values.end(), CalculateAverage()); Quais são os benefícios de usar um functor em uma function? Não é o primeiro muito mais fácil de ler (mesmo antes da implementação ser adicionada)? Suponha que o functor seja definido assim: class CalculateAverage { private: std::size_t num; double sum; public: […]

Excluindo elementos do conjunto STL durante a iteração

Eu preciso passar por um conjunto e remover elementos que atendem a um critério predefinido. Este é o código de teste que eu escrevi: #include #include void printElement(int value) { std::cout << value << " "; } int main() { int initNum[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }; […]

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?