Articles of stl

Usando classs locais com algoritmos STL

Sempre me perguntei por que você não pode usar classs definidas localmente como predicados para algoritmos STL. Na questão: Aproximando-se de algoritmos STL, lambda, classs locais e outras abordagens , BubbaT menciona que ‘ desde que o padrão C ++ proíbe tipos locais para serem usados ​​como argumentos ‘ Exemplo de código: int main() { […]

É seguro assumir que o armazenamento de vetores STL é sempre contíguo?

Se você tem um vetor STL que foi redimensionado, é seguro pegar o endereço do elemento 0 e assumir que o restante do vetor seguirá na memory? por exemplo vector vc(100); // do some stuff with vc vc.resize(200); char* p = &vc[0]; // do stuff with *p

char * vs std :: string em c ++

Quando devo usar std::string e quando devo usar char* para gerenciar matrizes de char em C ++? Parece que você deve usar char* se o desempenho (velocidade) é crucial e você está disposto a aceitar alguns negócios arriscados por causa do gerenciamento de memory. Existem outros cenários a serem considerados?

Existe algum risco real de derivar dos contêineres C ++ STL?

A alegação de que é um erro nunca usar um contêiner C ++ padrão como uma class base me surpreende. Se não é nenhum abuso da linguagem para declarar … // Example A typedef std::vector Rates; typedef std::vector Charges; … então, qual é exatamente o perigo em declarar … // Example B class Rates : […]

Por que os intervalos padrão do iterador são em vez de ?

Por que o padrão define end() como passado do final, em vez de no final real?

std :: endl é de tipo desconhecido ao sobrecarregar o operador <<

Sobrecarregei o operador << template UIStream& operator<<(const T); UIStream my_stream; my_stream << 10 << " heads"; Funciona, mas: my_stream << endl; Dá erro de compilation: erro C2678: binário ‘<<': nenhum operador encontrado que usa um operando à esquerda do tipo 'UIStream' (ou não há conversão aceitável) Qual é o trabalho para fazer my_stream << endl […]

Como faço para classificar um vetor de pares com base no segundo elemento do par?

Se eu tiver um vetor de pares: std::vector<std::pair > vec; Existe uma maneira fácil de classificar a lista em ordem crescente com base no segundo elemento do par? Eu sei que posso escrever um pequeno object de function que irá fazer o trabalho, mas existe uma maneira de usar as partes existentes do STL e […]

std :: vector :: resize () vs. std :: vector :: reserve ()

Há um tópico na seção de comentários deste post sobre o uso de std::vector::reserve() vs. std::vector::resize() . Aqui está o código original: void MyClass::my_method() { my_member.reserve(n_dim); for(int k = 0 ; k < n_dim ; k++ ) my_member[k] = k ; } Eu acredito que para escrever elementos no vector , a coisa correta a […]

Remover espaços de std :: string em C ++

Qual é a maneira preferida de remover espaços de uma string em C ++? Eu poderia percorrer todos os personagens e construir uma nova string, mas existe uma maneira melhor?

Por que os contêineres C ++ não permitem tipos incompletos?

Por que o C ++ não permite que contêineres de tipos incompletos sejam instanciados? É certamente possível escrever contêineres que não possuem essa restrição – o boost :: container é completamente capaz de fazer isso. Tanto quanto eu posso ver, não parece dar qualquer desempenho ou outro tipo de ganho, e ainda assim o padrão […]