2

実装ファイルに次のものがあります...

void ClientList::interestCompare(vector<string> intr)
{
    for(int index = 0; index < intr.size(); index++)
    {
        this->interests[index];  
    }
}

そしてこれは仕様ファイルにあります。

class ClientList
{
private:
// A structure for the list
struct ListNode
    {
        char gender;
        string name;
        string phone;
        int numInterests; // The number of interests for the client
        vector<string> interests; // list of interests
        string match;
        struct ListNode *next;  // To point to the next node
    }; 
//more stuff
...}

「this」ポインタを使用して、構造体の「interests」ベクトルにアクセスすることは可能ですか?

もしそうなら、どのように。

私は今それを持っているので、リストにアクセスするために、ListNodeポインターをheadに初期化します。「this」ポインタがクラスのメンバーにのみアクセスできるのか、それともクラスに埋め込まれているより深いADT変数にアクセスできるのか疑問に思っています。

その質問は意味がありますか?

4

2 に答える 2

4

ClientListクラス内でListNodeタイプを宣言しただけであり、ClientListのインスタンスがあることを意味するわけではありません。すでにstd::vectorを使用しているので、別のリストを実装する代わりに、std::vectorまたはstd::listを使用できます。

class ClientList
{
private:
// A structure for the list
  struct Client
  {
    char gender;
    std::string name;
    std::string phone;
    int numInterests; // The number of interests for the client
    std::vector<string> interests; // list of interests
    std::string match;
   }; 
   std::vector<Client> clients;
  //more stuff
};

編集:

2つのリストを比較する場合は、std :: set_intersectionを使用します。これには、2つのコンテナーが配置されている必要がありsortedます。

void ClientList::FindClientHasCommonInterest(const vector<string>& intr)
{
   for(auto client = clients.begin(); client != clients.end(); ++client)
   {
      std::vector<std::string> intereste_in_common;
       std::set_intersection((*client).begin(), (*client).end(), 
                             intr.begin(), intr.end(), 
                             std::back_inserter(intereste_in_common));
       if (intereste_in_common.size() >= 3)
       {
            // find one client
       }
   }  
}
于 2013-01-28T04:16:42.160 に答える
3

いいえ、ネストされたクラスのJavaとC++では異なります。C ++のネストされたクラスは、基本的にJavaの静的なネストされたクラスと同じです。したがって、ネストされた構造体のインスタンスを使用して、そのメンバーにアクセスする必要があります。

于 2013-01-28T04:20:22.440 に答える