建立一个c++程序,测试使用至少5个STL算法函数,功能不限,然后理解STL组件之间的联系。 项目或源程序保存为Lab14_1。
时间: 2024-03-01 11:53:08 浏览: 65
C++的STL编程
好的,我明白了。下面是一个简单的示例程序,演示了使用5个STL算法函数的功能,并且展示了STL组件之间的联系。
```c++
#include <iostream>
#include <vector>
#include <algorithm>
#include <numeric>
#include <iterator>
int main()
{
// 创建一个包含10个整数的向量
std::vector<int> vec(10);
std::iota(vec.begin(), vec.end(), 1);
// 打印向量的内容
std::cout << "Vector contents: ";
std::copy(vec.begin(), vec.end(), std::ostream_iterator<int>(std::cout, " "));
std::cout << std::endl;
// 求向量的和
int sum = std::accumulate(vec.begin(), vec.end(), 0);
std::cout << "Sum of vector elements: " << sum << std::endl;
// 反转向量的顺序
std::reverse(vec.begin(), vec.end());
std::cout << "Vector contents (after reverse): ";
std::copy(vec.begin(), vec.end(), std::ostream_iterator<int>(std::cout, " "));
std::cout << std::endl;
// 移除向量中的偶数
vec.erase(std::remove_if(vec.begin(), vec.end(), [](int n) { return n % 2 == 0; }), vec.end());
std::cout << "Vector contents (after remove_if): ";
std::copy(vec.begin(), vec.end(), std::ostream_iterator<int>(std::cout, " "));
std::cout << std::endl;
// 将向量中的元素按照奇偶性分为两个部分
std::vector<int> odd, even;
std::partition_copy(vec.begin(), vec.end(), std::back_inserter(odd), std::back_inserter(even), [](int n) { return n % 2 != 0; });
std::cout << "Odd elements: ";
std::copy(odd.begin(), odd.end(), std::ostream_iterator<int>(std::cout, " "));
std::cout << std::endl;
std::cout << "Even elements: ";
std::copy(even.begin(), even.end(), std::ostream_iterator<int>(std::cout, " "));
std::cout << std::endl;
return 0;
}
```
上述程序中,我们使用了以下5个STL算法函数:
1. `std::iota`:用于向向量中填充一系列连续的值。
2. `std::accumulate`:用于求向量的和。
3. `std::reverse`:用于反转向量的顺序。
4. `std::remove_if`:用于移除向量中满足指定条件的元素。
5. `std::partition_copy`:用于将向量中的元素按照指定条件分为两个部分。
我们可以发现,这些算法函数之间的联系是非常紧密的。它们都是STL组件中的一部分,都可以用于处理STL容器中的元素。此外,它们还可以互相组合使用,以实现更为复杂的功能。
阅读全文