万门cpp作业:写模板函数实现find_all和sort排序

sort 排序

#include<iostream>
#include<string>
#include<vector>
using namespace std;

template<class T>
void sort(T& input) {
	int l = input.size();
	for (int beg = l - 1; beg > 0; --beg)
		for (int i = 0; i < beg; ++i)
			if (input[i] > input[i + 1])
				swap(input[i], input[i + 1]);
	for (auto i : input)
		cout << i << "\n";
}

int main() { 
	vector<int> a{ 1,6,3,2,8,9 };
	sort(a);
	vector<double> b{ 1.1,1.2,1.6,1.5,1.8 };
	sort(b);
	string s = "1987634";
	sort(s);
	system("Pause");
	return 0;
}

在这里插入图片描述
find_all的实现

#include<iostream>
#include<string>
#include<vector>
#include<list>
using namespace std;

template<class T1,class T2>
vector<typename T1::iterator>
find_all(T1& input, const T2& val) {
	vector<typename T1::iterator> res;
	//T* head = &res;
	for (auto it = input.begin(); it != input.end(); ++it) {
		if (*it == val)
		{ res.push_back(it); }
	}
	return res;
}

void test() {
	string m { "mary had a little lamb" };
	for (auto p : find_all(m, 'a'))
		if (*p != 'a')
			cerr << "string bug!\n";
		else
			cout << "string is no bug!!" << endl;
	list<double> ld { 1.1,2.2,3.3,1.1 };
	for (auto p : find_all(ld, 1.1))
		if (*p != 1.1)
			cerr << "list bug!\n";
		else
			cout <<"list is no bug!!" << endl;
	vector<string> vs { "red","blue","green","green","orange","green" };
	for (auto p :find_all(vs,"red"))
		if(*p != "red")
			cerr << "vector bug!\n";
		else
			cout << "vector<list> is no bug!!" << endl;
	for (auto p : find_all(vs, "green")) {
		*p = "vert";
		cout << "this is vs gree"<<*p << endl;
	}
}

int main() {
	test();
	system("Pause");
	return 0;
}

在这里插入图片描述

这里主要是学会使用这个T::iterator 来访问容器元素的类型,加一个typename 来告诉编译器这是一个类型名称。

发布了46 篇原创文章 · 获赞 0 · 访问量 823

猜你喜欢

转载自blog.csdn.net/github_38148039/article/details/103964870