質問

PHPを約4年間使用していますが、パフォーマンスが若干(:P)向上する何かを必要とする問題に遭遇したため、C ++を選択しました。

私が書いているプログラムは、ロードするURLのMySQLデータベースをスキャンし、cURLを使用してロードし、指定された文字列を検索し、それに応じてデータベースを更新するLinuxデーモンです。私が直面している問題は、特定の文字列を検索するために変数に保存する必要があるデータのサイズがわからないことです。

リンクリストを使用し、データがリストを埋めるにつれてより多くのノードを割り当てるという考えがありました。これは物事を行うのに良い方法ですか?

事前に感謝、

役に立ちましたか?

解決

c ++では、ベクタークラスはサイズが不明なデータを格納できます。

#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);

もちろん、「string」は任意のデータ型にすることができ、Data [0]を使用してデータにアクセスして最初の文字列を返し、Data.size()を使用して文字列の量を返すことができますベクトル/配列。

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

他のヒント

一般に、標準コンテナのいずれかを使用する必要があります。私の個人的な提案は std :: vector です。 YOuは(データが連続していることが保証されているため)配列として使用でき、便利なインデックス付けと挿入操作があります(この時点では削除に関心がないようです)。

具体的には、次のような設定ができます

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

完了したら、 buff.size を呼び出して、読んだ量を確認できます。

追加のボーナスとして(実際に文字バッファーを処理している場合)、最終的に必要なすべてのデータを取得したら、 std :: string に変換して、必要な検索を実行できます

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

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

正確性のために編集。

そこで発見することがたくさんあります。

STLへの発見の具体的な方向付け: C ++リファレンス

を使用します。

今、あなたは使用方法を学ぶようにしてください:

  • std :: vector
  • std :: string
  • std :: cin および std :: cout (グローバル)

std :: string では、 find find_first_of find_last_of などの多数のアルゴリズムに注意する必要があります。 。

C ++での文字列操作は非常に困難な場合があることに注意してください(詳細など)。

正規表現に慣れている場合は、 Boost.Regex 。ライブラリとリンクする必要があることに注意してください。

また、PHPから来てパフォーマンスを向上させたい場合は、多くの異なるスクリプト言語から始めることができます(Pythonが私のお気に入りです)。おそらくもっと簡単でしょう。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top