| Autor |
Mensagem |
|
|
|
Parabéns! Usou algum simulado?
|
 |
|
|
|
Mas então, seja qual for a estrutura, o jeito mais fácil pra dar o insert é usando o advance mesmo?
|
 |
|
|
|
Eu estava usando uma deque também. Acabei trocando por list por conta desse trecho aqui que encontrei na página sobre o deque::insert no cplusplus.com: Insertions on other positions are usually less efficient than in list containers.
|
 |
|
|
|
Estou optando por uma list ao invés de vector pois de vez em quando preciso dar um push_front nela. Se fosse um vector, teria um jeito mais simples de dar o insert?
|
 |
|
|
Oi pessoal,
Digamos que eu tenha uma lista com 10 posições. Quero inserir um valor na lista que fique na posição 4, por exemplo. Claro que quero que minha list se encarregue de qualquer realocação necessária.
Olhando o método insert (http://www.cplusplus.com/reference/stl/list/insert/) ele parece ser o que preciso. Mas a impressão que tenho é que teria que iterar sobre a lista até a posição 4, para então ter um iterator válido para aquela posição e então poder usar o insert. É isso mesmo? Não tem algum jeito de simplesmente passar a posição onde quero que o novo elemento fique sem ter de iterar sobre a lista antes?
|
 |
|
|
Oi pessoal,
Tenho um arquivo com datas no formato 20110104-07:48:00.488. Tô tentando criar objetos ptime da boost para fazer algumas operações como verificar se uma data é maior que a outra etc. Queria fazer isso sem ter de mexer nas datas que tenho no arquivo, porque são milhões de registros. Me parece que o que preciso é algo como o SimpleDateFormat do java..mas não tô achando algo equivalente na boost..cheguei a tentar usar os tais de time_input_facet mas não consegui o que queria ainda..Alguém pode dar uma dica?
|
 |
|
|
entanglement wrote:
Uai - compilei o programa acima (tanto com o Microsoft C++ quanto com o g++) e não tive problemas. Por acaso você está usando alguma opção esquisita do Boost que força o uso de bibliotecas dinâmicas (DLL ou .SO) ?
Acabei descobrindo que se trata de um bug do CDT. Bastou desativar o "code analysis" no eclipse pra (obviamente) o erro não ser mais informado. E o g++ compila tudo normalmente. Ele me mostrava erro quando tentava usar o foreach da boost também.
|
 |
|
|
entanglement wrote:
rodrigo.bossini wrote:
ViniGodoy wrote:Se é um mapa de Strings, por que não fez um std::map<string, string>?
Não use char*. Além de ser bem mais difícil e sujeito a erros, é mais lento que usar a classe std::string.
Não se esqueça também que em C++ strings são objetos mutáveis. E você não deve alterar seu conteúdo uma vez que elas se tornem chaves no mapa.
Pra ser sincero nem lembro mais pq to usando char *. Acho que é pq estou usando coisas do C, como strtok. Aliás, tem algum método split em c++?
Se estiver usando o Boost, use boost::regex_split (ou então regex_token_iterator) , se quiser fazer uma cópia "ipsis litteris" do String.split do Java, ou então boost::algorithm::string::split (que é mais leve que o regex_split) se a string for fixa ou então for um de uma série de caracteres.
To tentando usar o split da boost e tá dando erro..tem alguma opção que tenho de passar para o linker?
|
 |
|
|
ViniGodoy wrote:Se é um mapa de Strings, por que não fez um std::map<string, string>?
Não use char*. Além de ser bem mais difícil e sujeito a erros, é mais lento que usar a classe std::string.
Não se esqueça também que em C++ strings são objetos mutáveis. E você não deve alterar seu conteúdo uma vez que elas se tornem chaves no mapa.
Pra ser sincero nem lembro mais pq to usando char *. Acho que é pq estou usando coisas do C, como strtok. Aliás, tem algum método split em c++?
|
 |
|
|
"Resolvi" o problema trocando minha função de comparação para
Mas gostaria muito se alguém comentasse o problema que mostrei acima.
Rodrigo.
|
 |
|
|
Oi pessoal,
Estou usando um boost::unordered_map <const char *,std::vector ><const char *> > para armazenar dados de um arquivo.
Meu problema é que a comparação entre chaves não parece estar funcionando como esperado..
Por exemplo, no arquivo tenho uma chave "tam_bloco" que é armazenada corretamente no mapa e seu vector associado também é adicionado sem problema.
Mas quando dou um get ("tam_bloco" nesse mapa, ele diz que não encontrou nada no mapa com essa chave...embora antes disso eu ter acabado de verificar
que a chave está sim no mapa, e com um vector com alguns elementos associado..
Pesquisando um pouco, descobri que poderia ser necessário informar uma função para o mapa usar para comparar as chaves..então passei a usar um
boost::unordered_map <const char *,std::vector ><const char *>, boost::hash<const char *>,eqstr >
Esse eqstr é isso aqui:
O bizarro é que com esse código, executo várias vezes e obtenho resultados diferentes..às vezes ele acha a chave no mapa..e às vezes diz que não tem nada..o mesmíssimo código..sem alterar nada..mostra resultados diferentes a cada execução...como pode isso?
Cheguei a tentar usar uma std::equal_to<const char *> nesse mesmo mapa, no lugar de eqstr..mas aí ele nunca encontra a chave que tenho certeza que está lá...alguma luz?
|
 |
|
|
Acho que não entendi bem o que você não está conseguindo fazer, mas acho que esse trecho aqui pode lhe ser útil:
Because templates are compiled when required, this forces a restriction for multi-file projects: the implementation (definition) of a template class or function must be in the same file as its declaration. That means that we cannot separate the interface in a separate header file, and that we must include both interface and implementation in any file that uses the templates.
|
 |
|
|
Bom..acho que você vai precisar trazer as perguntas do banco e armazená-las em alguma estrutura de dados..um array..um mapa..o que for melhor pra sua aplicação.
Mas uma ideia geral seria essa aqui:
Você tem tudo armazenado num array de n posições, chamada meuArray.
Você pode usar a classe Random como no código acima para gerar um inteiro aleatório de 0 a n-1, digamos i. E então usar a pergunta armazenada em meuArray[i].
|
 |
|
|
Esse trecho de código gera um número aleatório entre a e b (inclusive). A partir daí é só usar a criatividade.
|
 |
|
|
Aproveitando o tópico e a boa vontade..no diretório lib da boost tenho diversas opções de thread pra escolher..os nomes diferem nas letras finais antes da extensão..
sabe dizer a diferença entre cada um desses aí (vide imagem anexa)?
|
 |
|
|