std::list 使用:结构体指针的list定义、排序和查找

xiuxiu1017 2013-04-29 04:31:01
//1 结构体定义
struct RC_Node
{
CHAR cNode[16];
UINTPnt *pnt;
RC_Node *pnodeFather;

// 问题1 :结构体的初始化一直报错:error C2059 C2334[/color]
//RC_Node
//{
// memset(this, 0, sizeof(RC_Node));
//}
//函数问题2
BOOL comp_equal(const RC_Node *node)
{
return this->cNode == node->cNode;
}
};

// 2 list定义 问题3
list<RC_Node*> listNode = new list<RC_Node*>;
listNode = NULL;

//3list排序定义函数
inline BOOL comp_sort(const RC_Node *node1, const RC_Node *node2)
{
return node1->iF < node2->iF;
}
//4 查找
list<RC_Node*>::iterator it_node;
it_node = find_if(listOpen.begin(), listOpen.end(),pNode->comp_equal());
if (it_node == listOpen.end())
{
return FALSE;//不存在,返回false
}
//5 排序
listNode.sort(comp_sort());

问题1
结构体中定义总是报错//TODO下面注释掉的部分
为什么呢?上面的RC_Node *pnodeFather;有问题?

问题2
std中list可以定义为指针类型的吗?list<RC_Node*> listNode = new list<RC_Node*>;
这种定义的错误是什么?正确的改如何定义呢?

问题3
自定义list查找和排序报错了
参照网上帖子里的写法,可是到我这里有问题,自己不明白
...全文
829 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiuxiu1017 2013-05-06
  • 打赏
  • 举报
回复
自己之前参照的网上的代码本身就有问题,直接调试编译不过 总结了,学习资料千千万,还得自己仔细考虑、学习
xiuxiu1017 2013-05-06
  • 打赏
  • 举报
回复
问题解决了 问题2:书写疏忽,应该是end(),少了"()" 问题3: 查找——改用class定义 class Comp_Equal { public: Comp_Equal(){ memset(m_cNode,0,16); } ~Comp_Equal(){ osdelete(m_cNode,16); } BOOL operator()(const RC_Node *node) { if (node != NULL) { return node->cNode == m_cNode; } return FALSE; } public: static CHAR m_cNode[16]; }; 调用: memset(Comp_Equal::m_cNode,0,16); memcpy(Comp_Equal::m_cNode,pNode->cNode,16); list<RC_Node*>::iterator it_node; it_node = find_if(listOpen->begin(), listOpen->end(),Comp_Equal()); 排序—— 结构体中重定义< : BOOL operator < (const RC_Node *node) { return this->iF < node->iF; } 排序时直接调用:listOpen->sort();
xiuxiu1017 2013-04-30
  • 打赏
  • 举报
回复
感谢xiaohuh421 你说的对,学习了 问题1:缺少了构造函数的() 问题2:其实我本想把RC_Node定义为指针,然后用list存储起来 现在list<RC_Node*> *pList = new list<Rc_Node*>; 是改成list的指针了,对吧? 那进行list遍历的时候改如何定义? list<RC_Node*>::iterator it_node = listRouteNode->begin(); for (; it_node!=listRouteNode->end ; it_node++) { } 编译报错说: error C3867: “std::list<_Ty>::end”: 函数调用缺少参数列表;请使用“&std::list<_Ty>::end”创建指向成员的指针 error C2678: 二进制“!=”: 没有找到接受“std::list<_Ty>::_Iterator<_Secure_validation>”类型的左操作数的运算符(或没有可接受的转换) 我现在的写法还是有问题,错在哪里了呢? 问题3:查找和排序,编译就报错了(不用设置断点) 查找 list<RC_Node*>::iterator it_node; it_node = find_if(listOpen->begin(), listOpen->end(),pNode->comp_equal()); error C2660: “RC_Node::comp_equal”: 函数不接受 0 个参数 我也知道自己写的函数有两个参数的,调用的时候没有传参进去,这有问题,可是不知道正确的该怎么写。在网上看的帖子是这样的: http://blog.csdn.net/whz_zb/article/details/6831817 7)、使用STL通用算法find()在list中查找对象 list<char >::iterator FindIterator; FindIterator = find(cList.begin(), cList.end(), ‘c’); If (FindIterator == cList.end()) { printf(“not find the char ‘c’!”); } else { printf(“%c”, * FindIterator); }说明:如果没有找到指定的对象,就会返回cList.end()的值,找到了就返回一个指向对象iterator的指针。 8)、使用STL通用算法find_if()在list中查找对象 const char c(‘c’); class c { public: bool operator() ( char& ch ) { return ch== c; } }; list<char>::iterator FindIterator FindIterator = find_if (cList.begin(), cList.end(),IsC());//查找字符串c;说明:如果没有找到指定的对象,就会返回cList.end()的值,找到了就返回一个指向对象iterator的指针。 排序 listOpen->sort(comp_sort()); 在网上看的帖子是这样的: http://zhidao.baidu.com/question/91663113.html struct Test { //结构体定义 string Name; int order; }; bool comp(const Test &lhs, const Test &rhs)//排序用到的函数 { return lhs.order < rhs.order;} list<Test> testList; //list定义 testList.sort(comp);//************list排序调用 我现在list和其中的内容定义成了指针,不会理解应用了
xiaohuh421 2013-04-29
  • 打赏
  • 举报
回复
结构体的初始化, 还可以这样, 不用写一个构造函数; 在定义变量的时候初始化. RC_Node myNode = {0};//全部初始化为0 或者new方式; RC_Node *pNode = new RC_Node(); //加个括号就全部初始化为0 其实对于new的出的很多东西都可以这样写, 加个括号就全部初始化为0, 不用memset了. 比如: char *pBuf = new char[10](); 或者 int *pArry = new int[20]();
xiaohuh421 2013-04-29
  • 打赏
  • 举报
回复
// 问题1 :结构体的初始化一直报错:error C2059 C2334[/color] //RC_Node //{ // memset(this, 0, sizeof(RC_Node)); //} -----> 这里不知道你那会报什么错, 但我一看, 因为结构体是一种特殊的类, 但其构造函数的()还是不能省的吧. 加了括号 在VS2008中是没有任何问题的. 问题2: 你的写法还是错的, 模板类中 list<RC_Node*> 这才是类名. 你要定义指针.应该是这样: list<RC_Node*> *pList = new list<Rc_Node*>; 问题3: 报的什么错?, 可以跟踪断点看看.

64,652

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧