定义
struct _clientDataPack
{
char client_addr[16];
int  client_port;
int isclose;};
list<struct _clientDataPack> g_clientDataPack;struct _clientDataPack _clientDataPack_temp;
list<struct _clientDataPack>::iterator  _clientDataPack_findIterator;我想找到后修改其中的值 ,但是编译不通过,
strcpy(_clientDataPack_temp.client_addr,"192.168.2.1");
_clientDataPack_temp.client_port=6500;
_clientDataPack_temp.isclose=0;
 _clientDataPack_findIterator=find(g_clientDataPack.begin(), g_clientDataPack.end(),
  _clientDataPack_temp);
 if( _clientDataPack_findIterator!=g_clientDataPack.end()) 
  {
          _clientDataPack_find.isclose=1;;
  }
该怎么查和修改原来的值

解决方案 »

  1.   

    一点浅见:1. 不能在自定义list中用实类型,要用指针类型.否则list
    2. 不能使用std::find()函数,应该使用
    std::find_if(InputIterator first,InputIterator last, Predicate pred)
    不然是找不到东西的。
    3. predicate的定义有点复杂,我也正在学习.
      

  2.   

    #include "stdafx.h"
    #include <list>
    #include <algorithm>
    using namespace std;
    struct _clientDataPack
    {
    char client_addr[16];
    int  client_port;
    int isclose;
    bool operator==(const _clientDataPack& obj)
    {
    return obj.isclose==this->isclose&&obj.client_port==this->client_port&& strcmp(obj.client_addr,this->client_addr)==0;
    }
    };
    typedef list< _clientDataPack> MyList;
    int _tmain(int argc, _TCHAR* argv[])
    {
    MyList g_clientDataPack;
    _clientDataPack _clientDataPack_temp;
    strcpy(_clientDataPack_temp.client_addr,"192.168.2.1");
    _clientDataPack_temp.client_port=6500;
    _clientDataPack_temp.isclose=0;
     MyList::iterator _clientDataPack_findIterator=find<MyList::iterator, _clientDataPack>(g_clientDataPack.begin(), g_clientDataPack.end(),
      _clientDataPack_temp);
     if( _clientDataPack_findIterator!=g_clientDataPack.end()) 
      {
              _clientDataPack_findIterator->isclose=1;;
      } return 0;