最近又重新开始学c++了,才逐渐认识到c++的强大,原来自己一直都是一个小菜鸟。今天在学find这个泛型算法的时候,又遇到了一个有趣的问题,故写下来了。
先贴上代码吧
#include<iostream>
#include<string>
#include<list>
#include<algorithm>
#include<iterator>
#include<string>
using namespace std;
template <typename InputItera, typename T >
inline InputItera find(InputItera first, InputItera last, const T& value) {
while (first != last && *first != value)
{
++first;
}
return first;
}
int main(void)
{
int a[10] = {12, 3, 25, 7, 11, 213, 7, 123, 29, -31};
int *ptr = ::find(&a[0], &a[10], 7);
cout << "Test array" << endl;
cout << *ptr << ' ' << *(ptr + 1) << endl;
list<int> list1(&a[0], &a[10]);
list<int>::iterator ptr1 = ::find(list1.begin(), list1.end(), 7);
cout << "Test list" << endl;
cout << *ptr1 << ‘ ‘ << *(++ptr1) << endl;
return 0;
}
输出的结果是:
Test array
7 11
Test list
11 11
原本以为第二个输出的和第一个是一样的7和11,但是实际结果却不是这样的。
这个问题也很简单,就是cout的机制是从右至左输出的,所以执行的先后顺序就是:先执行++ptr1然后输出ptr1,最后在输出ptr1。
原文链接: https://www.cnblogs.com/lutianba/archive/2013/05/15/3080333.html
欢迎关注
微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍
原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/88632
非原创文章文中已经注明原地址,如有侵权,联系删除
关注公众号【高性能架构探索】,第一时间获取最新文章
转载文章受原作者版权保护。转载请注明原作者出处!