泛型算法_简单模拟实现STL中的copy

版权声明:私藏源代码是违反人性的罪恶行为!博客转载无需告知,学无止境。 https://blog.csdn.net/qq_41822235/article/details/83539171

一、 泛型copy 

template<typename SrcIt, typename DesIt>
void mcopy(SrcIt first, SrcIt last, DesIt desit)
{
	while (first != last)
	{
		*desit = *first;
		first++;
	}
}

二、 测试 

从调用copy函数的时候,我们可以看到,第三个参数是一个输出流的迭代器。可以推测:该迭代器重载了解引用运算符(*)和等号运算符(=)。在copy函数内有这样的一条语句:

        *desit = *first;

 实际上相当于cout<<*first;   cout<<空格;去查看输出流的迭代器源代码时,发现确实是这么做的。因为在实例化该迭代器的时候,第一个实参(形参是实参的引用类型,不要问为什么;库函数就是这么设计的,如果我们设计的话,也会这么设计的)是cout,第二个实参是字符串,只包含一个空格字符,结束符'\0'是自动加上的。所以就会有稍前红体加重的那一句。

int main()
{
	vector<int> vec1;
	for (int i = 0; i < 5; ++i)
		vec1.push_back(i + 2);
	mcopy(vec1.begin(), vec1.end(), ostream_iterator<int>(cout, " "));
	cout << endl;
	return 0;
}
图1 VS2017下运行结果

猜你喜欢

转载自blog.csdn.net/qq_41822235/article/details/83539171
今日推荐