编写一个具有以下原型的函数模板 //template<class T> //void exchange(list<T>& l1, list<T>::iterator p1, list<T>& l2, list<T>::iterator p2); //该模板用于将l1链表的[p1, l1.end())区间和l2链表[p2, l2.end())区间的内容交换 //在主函数中调用该模板,以测试该模板的正确性c++
时间: 2023-12-03 20:44:08 浏览: 114
以下是具有上述原型的函数模板的实现:
```cpp
#include <iostream>
#include <list>
template<class T>
void exchange(std::list<T>& l1, typename std::list<T>::iterator p1, std::list<T>& l2, typename std::list<T>::iterator p2)
{
// 将两个区间的元素交换
while (p1 != l1.end() && p2 != l2.end())
{
std::swap(*p1, *p2);
++p1;
++p2;
}
}
int main()
{
// 创建两个链表并初始化
std::list<int> l1{1, 2, 3, 4, 5};
std::list<int> l2{6, 7, 8, 9, 10};
// 输出交换前的链表
std::cout << "Before exchange:" << std::endl;
std::cout << "l1: ";
for (auto i : l1)
std::cout << i << " ";
std::cout << std::endl;
std::cout << "l2: ";
for (auto i : l2)
std::cout << i << " ";
std::cout << std::endl;
// 调用exchange函数模板
exchange(l1, l1.begin(), l2, l2.begin());
// 输出交换后的链表
std::cout << "After exchange:" << std::endl;
std::cout << "l1: ";
for (auto i : l1)
std::cout << i << " ";
std::cout << std::endl;
std::cout << "l2: ";
for (auto i : l2)
std::cout << i << " ";
std::cout << std::endl;
return 0;
}
```
该函数模板接受两个链表和两个迭代器作为参数,将这两个链表中指定区间的元素交换。在主函数中,我们创建了两个链表 `l1` 和 `l2`,并初始化它们。然后,我们输出交换前的链表,调用 `exchange` 函数模板交换 `l1` 和 `l2` 中的元素,最后输出交换后的链表以验证交换是否成功。
阅读全文