c++中find函数的基本用法

14 篇文章 0 订阅

问题出自:PAT B组 1053

find - C++ Reference (cplusplus.com)

测试代码:

#include<iostream>
#include<algorithm>
using namespace std;
int main() {
	int arr[5] = { 0,1,2,3,4 };
	int* pos;
	//find的返回值是指针类型!!!
	cout << "数组首地址解引后数据: " << *arr << endl;
	cout << "数组首地址+2后的地址解引后数据: " << arr + 2 << endl;
	pos = find(arr, arr + 5, 2);
	cout << "数组中第一个整型2所在地址: " << pos << endl;
	//目标在数组的下标  注意,数组从0开始
	cout << "将find函数找到的地址解引: " << *pos << endl;
}

经历初步尝试后,可以得出结论:

 1.find函数基本写法: 

头文件: #include<algorithm>

声明pos为寻找目标的指针类型

pos = find(arr, arr+n, tag);

注: 似乎还有一种写法: arr.find(tag)

这种写法的缺陷:

1.find函数的返回值必须与被搜索数组的类型相同

2.当搜索失败时,返回值难以被其他操作使用

适用于这种写法的小技巧:

当成功找到并返回一个地址后,想使用改地址作为for循环的分界线时,可以使用两种分界方式:

样例: char num[10][10];  char* pos;

1.地址分界

for(int i = 0; i < 10; i++)

if (num + i > pos);

2.下标分界

for(int i=0;i<10;i++)

if (i > pos - num);

另一种写法引入:

#include<iostream>
#include<algorithm>
using namespace std;
int main() {
	int arr[5] = { 0,1,2,3,4 };
	int* pos;
	//find的返回值是指针类型!!!
	cout << "数组首地址解引后数据: " << *arr << endl;
	cout << "数组首地址+2后的地址解引后数据: " << arr + 2 << endl;
	pos = find(arr, arr + 5, 2);
	cout << "数组中第一个整型2所在地址: " << pos << endl;
	//目标在数组的下标  注意,数组从0开始
	cout << "将find函数找到的地址解引: " << *pos << endl;
	pos = find(arr, arr + 5, 9);
	cout << pos << " " << *pos << endl;
	/*char a[9][5];
	int pos = a[2].find('o');*/

	string a[9];
	cin >> a[2];
	//如果使用char类型的find声明写法,会出现两个错误
	int pos1 = find(a[2],a[2]+2,'o');
	cout << "pos1 = " << pos1 << endl;
}

该写法第一次尝试的报错及第一种写法的奇怪返回值:

 正确写法:

string a[9];
cin >> a[2];
int pos1 = a[2].find('o');
cout << "pos1 = " << pos1 << endl;

未找到将返回-1

注意: 这种写法仅使用于类模板的查找,在c++中,string即为系统创建的类模板

也就是说,char num[10][10];  尽管表示上与string[10]大致相同,但也无法使用这种写法

也有可能是我不知道,其实可以这么写

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值