Pular para o conteúdo principal

Postagens

Mostrando postagens de outubro, 2015

Range loops - Escrevendo código seguro

Eu estava olhando um código de um sistema e me deparei com um trecho que me fez torcer o nariz. O código funcionava, mas imediatamente vi dois problemas potenciais: Bug de int/unsigned int Um vector::size() - 1 Se size for 0, o resultado será 4294967295 ou 0xFFFFFFFF! Código confuso e facilmente quebrável msgs[count] - Não tem offset dinâmico Um count inválido pode quebrar o programa https://gist.github.com/thiagomg/fb38cc780769449dc162 Eu suponho que a pessoa que desenvolveu o código fez dessa forma para pegar os itens que estavam no vector , excluindo os itens da borda (0:n), mas como seria essa implementação da forma STL de se programar ?

Iterator com predicado, o que é isso?

O iterator é um objeto que aponta ou indica um elemento em uma extensão de elementos, tais como containers da STL (por exemplo: std::vector ) ou um array . A Standard Template Library ( STL ) possui uma boa variedade de containers ou coleções que podem armazenar elementos, onde uma das operações naturais sobre estes containers são as iterações – assim é possível percorrer ou visitar cada elemento presente. Certa vez, li uma definição do relacionamento entre os principais recursos da STL ( iterators , algorithms e containers ) que era algo do tipo: algorithms atuam em containers através de iterators . Esta é uma definição simplificada e válida do que chamamos de “STL-way”. Se tentar copiar elementos de um std::vector para outro std::vector , provavelmente utilizará um std::copy e passará um par de iterators ( begin e end ) para indicar a extensão a ser copiada, além de utilizar um outro iterator para indicar o destino: https://gist.github.com/fabiogaluppo/804735b9d96ed1ff59...