• 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏吧

关于指针类型的STL函数对象

c/c++ 来源:RainMan14 3次浏览

我读到“库确保指针类型的较少(和其他函数对象)被很好地定义”。它来自C++ Primer第5版。并且例子是:关于指针类型的STL函数对象

vector <string *> nameTable; 
sort(nameTable.begin(), nameTable.end(), less<string *>()); 

但当我尝试这个办法:

string *p1 = new string("abc"); 
string *p2 = new string("abc"); 
cout << equal_to<string *>()(p1, p2); 

它返回0,这意味着假。为什么?

编辑:对不起,我阅读并理解错误的书。它说:

vector<string *> nameTable; 
sort(nameTable.begin(), nameTable.end(), [](string *a, string *b) { return a < b; }); // undefined 
sort(nameTable.begin(), nameTable.end(), less<string*>()); // ok. however, meaningless 


===========解决方案如下:

您的比较将比较指针而不是它们指向的字符串。比较使用<>的指针被指定为特定执行。使用==!=是指针上唯一明确定义的操作,但它仍然只比较指针。

std::less(以及std::greater等)模板有指针的比较(通过特化)以及指定的含义。但他们仍然比较指针而不是他们指向。

简单的解决方案? 不要使用指针!

在现代C++中,指针超越多态性的用处很少。指向字符串的指针更少(如果有的话)用于。例外可能是来自C++ 11的智能指针,但是我建议您根据所有权而不是自我删除指针来看待它们。


版权声明:本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系管理员进行删除。
喜欢 (0)