4

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

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

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

前もって感謝します、

4

3 に答える 3

6

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

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

for(int x = 0; x != Data.size(); x++)
{
   //Do what you want with the data here using Data[x]
}
于 2009-10-29T14:36:15.790 に答える
2

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

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

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

正確さのために編集されました。

于 2009-10-29T14:33:06.447 に答える
1

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

ディスカバリーをSTLに具体的に向ける必要があります。C++リファレンスを使用してください

今、あなたは使用方法を学ぶことを試みるべきです:

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

、、、のようなstd::stringアルゴリズムのかなりの数に注意する必要があります。findfind_first_offind_last_of

C ++での文字列操作は、(冗長な場合のように)非常に難しい場合があることに注意してください。

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

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

于 2009-10-29T16:45:22.653 に答える