Pergunta

Estou usando o PHP por cerca de 4 anos, no entanto eu me deparei com um problema que requer algo com um pouco (: P). Melhor desempenho e por isso que eu escolhi C ++

O programa que eu estou escrevendo é um daemon Linux que irá analisar um banco de dados MySQL para URLs de carga, carregá-los usando cURL, procurar uma cadeia especificada, e em seguida, atualizar o banco de dados em conformidade. O problema que estou enfrentando é que eu não sei o tamanho dos dados que precisam ser armazenados em uma variável, a fim de ser procurado uma seqüência específica.

Eu tive a idéia de usar uma lista ligada e alocando mais nós como os dados preenche a lista. É este um bom caminho a percorrer cerca de fazer as coisas?

Agradecemos antecipadamente,

Foi útil?

Solução

em c ++ a classe vector pode armazenar uma quantidade do tamanho desconhecido de dados.

#include <string>
#include <vector>

std::vector <std::string>Data;

std::string newData = "a String";
Data.push_back(newData);

std::string otherData = "a different String";
Data.push_back(otherData);

é claro 'string' poderia ser qualquer tipo de dados que você quer, e você pode acessar os dados usando os dados [0] para voltar a primeira corda, e você pode usar Data.size () para retornar a quantidade de cordas em o vector / matriz.

for(int x = 0; x != Data.size(); x++)
{
   //Do what you want with the data here using Data[x]
}

Outras dicas

Em geral, você iria querer usar um dos contentores normais. Minha sugestão pessoal é std::vector. Você pode usá-lo como uma matriz (como os dados são garantidos para ser contígua) e tem operações de indexação e inserção convenientes (parece que você não está interessado na remoção neste momento).

Especificamente, você poderia criar algo como

std::vector<char> buff;
// while you are reading data
buff.push_back (item);

Quando estiver pronto você pode chamar buff.size para descobrir o quanto você lê.

Como um bônus adicional (se você está de fato lidando com buffers de caracteres), quando você finalmente obter todos os dados que você precisa você pode converter para uma std::string para fazer o que a pesquisa que você quer fazer.

std::vector<char> buff;
buff.push_back('e');
buff.push_back('a');
buff.push_back('t');

std::string s(&buff[0], buff.size());

editado para correção.

Você tem um lote inteiro para descobrir lá.

Você especificamente deve orientar a sua descoberta ao STL: uso C ++ referência

Agora você deve tentar aprender como usar:

  • std::vector
  • std::string
  • std::cin e std::cout (globals)

Em std::string você deve observar um bom número de algoritmo como find, find_first_of, find_last_of.

Note que as manipulações de string em C ++ pode ser bastante desafiador (como no verbose).

Se você estiver confortável com expressões regulares, você pode estar disposto a tentar Boost.Regex . Note que você tem que ligação com a sua biblioteca.

Além disso, se você vem de PHP e quer aumentar seu desempenho, você poderia começar com um monte de diferentes linguagens de script (Python é o meu favorito), e provavelmente seria mais fácil.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top