在C++编程中,STL(标准模板库)是一个非常强大的工具,它提供了丰富的容器、迭代器、算法和函数对象,使得开发者能够以简洁高效的方式处理复杂的数据结构和算法问题。本文将为你提供20个实用实例,帮助你更好地掌握STL编程,轻松解决各种复杂问题。
实例1:使用vector存储和遍历数据
#include <iostream>
#include <vector>
int main() {
std::vector<int> vec = {1, 2, 3, 4, 5};
for (int i = 0; i < vec.size(); ++i) {
std::cout << vec[i] << " ";
}
std::cout << std::endl;
return 0;
}
在这个例子中,我们使用vector容器来存储一系列整数,并通过循环遍历并打印它们。
实例2:使用list实现动态数组
#include <iostream>
#include <list>
int main() {
std::list<int> lst;
lst.push_back(1);
lst.push_back(2);
lst.push_back(3);
for (auto it = lst.begin(); it != lst.end(); ++it) {
std::cout << *it << " ";
}
std::cout << std::endl;
return 0;
}
在这个例子中,我们使用list容器来模拟动态数组的功能,它可以动态地添加和删除元素。
实例3:使用map进行键值对存储
#include <iostream>
#include <map>
int main() {
std::map<int, std::string> mp;
mp[1] = "one";
mp[2] = "two";
mp[3] = "three";
for (auto it = mp.begin(); it != mp.end(); ++it) {
std::cout << it->first << ": " << it->second << std::endl;
}
return 0;
}
在这个例子中,我们使用map容器来存储键值对,它可以自动按照键进行排序。
实例4:使用set存储唯一元素
#include <iostream>
#include <set>
int main() {
std::set<int> st;
st.insert(1);
st.insert(2);
st.insert(3);
for (auto it = st.begin(); it != st.end(); ++it) {
std::cout << *it << " ";
}
std::cout << std::endl;
return 0;
}
在这个例子中,我们使用set容器来存储一系列唯一的整数。
实例5:使用pair存储关联数据
#include <iostream>
#include <utility>
int main() {
std::pair<int, std::string> p = std::make_pair(1, "one");
std::cout << p.first << ": " << p.second << std::endl;
return 0;
}
在这个例子中,我们使用pair模板来存储关联数据,它是一个包含两个元素的容器。
实例6:使用algorithm进行排序
#include <iostream>
#include <algorithm>
int main() {
std::vector<int> vec = {5, 2, 8, 3, 1};
std::sort(vec.begin(), vec.end());
for (int i = 0; i < vec.size(); ++i) {
std::cout << vec[i] << " ";
}
std::cout << std::endl;
return 0;
}
在这个例子中,我们使用algorithm库中的sort函数来对vector容器中的元素进行排序。
实例7:使用iterator进行遍历
#include <iostream>
#include <vector>
#include <iterator>
int main() {
std::vector<int> vec = {1, 2, 3, 4, 5};
std::copy(vec.begin(), vec.end(), std::ostream_iterator<int>(std::cout, " "));
return 0;
}
在这个例子中,我们使用迭代器来遍历vector容器中的元素,并使用copy函数将它们复制到输出流中。
实例8:使用function对象进行条件判断
#include <iostream>
#include <vector>
#include <algorithm>
#include <functional>
int main() {
std::vector<int> vec = {1, 2, 3, 4, 5};
auto it = std::find_if(vec.begin(), vec.end(), [](int x) { return x > 3; });
if (it != vec.end()) {
std::cout << "Found: " << *it << std::endl;
} else {
std::cout << "Not found." << std::endl;
}
return 0;
}
在这个例子中,我们使用find_if函数和lambda表达式来查找满足条件的元素。
实例9:使用functor进行自定义操作
#include <iostream>
#include <vector>
#include <algorithm>
#include <functional>
class MyFunctor {
public:
bool operator()(int x) {
return x > 3;
}
};
int main() {
std::vector<int> vec = {1, 2, 3, 4, 5};
auto it = std::find_if(vec.begin(), vec.end(), MyFunctor());
if (it != vec.end()) {
std::cout << "Found: " << *it << std::endl;
} else {
std::cout << "Not found." << std::endl;
}
return 0;
}
在这个例子中,我们定义了一个自定义的functor类,用于在find_if函数中进行条件判断。
实例10:使用bind进行函数绑定
#include <iostream>
#include <vector>
#include <algorithm>
#include <functional>
int main() {
std::vector<int> vec = {1, 2, 3, 4, 5};
std::sort(vec.begin(), vec.end(), std::bind(std::greater<int>(), std::placeholders::_1, std::placeholders::_2));
for (int i = 0; i < vec.size(); ++i) {
std::cout << vec[i] << " ";
}
std::cout << std::endl;
return 0;
}
在这个例子中,我们使用bind函数来绑定greater<int>函数对象,以便在sort函数中进行降序排序。
实例11:使用unique去除重复元素
#include <iostream>
#include <vector>
#include <algorithm>
int main() {
std::vector<int> vec = {1, 2, 2, 3, 4, 4, 4, 5};
auto it = std::unique(vec.begin(), vec.end());
vec.erase(it, vec.end());
for (int i = 0; i < vec.size(); ++i) {
std::cout << vec[i] << " ";
}
std::cout << std::endl;
return 0;
}
在这个例子中,我们使用unique函数来去除vector容器中的重复元素。
实例12:使用merge合并两个有序序列
#include <iostream>
#include <vector>
#include <algorithm>
int main() {
std::vector<int> vec1 = {1, 3, 5};
std::vector<int> vec2 = {2, 4, 6};
std::vector<int> vec3(vec1.size() + vec2.size());
std::merge(vec1.begin(), vec1.end(), vec2.begin(), vec2.end(), vec3.begin());
for (int i = 0; i < vec3.size(); ++i) {
std::cout << vec3[i] << " ";
}
std::cout << std::endl;
return 0;
}
在这个例子中,我们使用merge函数来合并两个有序序列。
实例13:使用partition进行条件分区
#include <iostream>
#include <vector>
#include <algorithm>
int main() {
std::vector<int> vec = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
std::partition(vec.begin(), vec.end(), [](int x) { return x % 2 == 0; });
for (int i = 0; i < vec.size(); ++i) {
std::cout << vec[i] << " ";
}
std::cout << std::endl;
return 0;
}
在这个例子中,我们使用partition函数来根据条件将元素分区。
实例14:使用reverse进行反转操作
#include <iostream>
#include <vector>
#include <algorithm>
int main() {
std::vector<int> vec = {1, 2, 3, 4, 5};
std::reverse(vec.begin(), vec.end());
for (int i = 0; i < vec.size(); ++i) {
std::cout << vec[i] << " ";
}
std::cout << std::endl;
return 0;
}
在这个例子中,我们使用reverse函数来反转vector容器中的元素。
实例15:使用rotate进行旋转操作
#include <iostream>
#include <vector>
#include <algorithm>
int main() {
std::vector<int> vec = {1, 2, 3, 4, 5};
std::rotate(vec.begin(), vec.begin() + 2, vec.end());
for (int i = 0; i < vec.size(); ++i) {
std::cout << vec[i] << " ";
}
std::cout << std::endl;
return 0;
}
在这个例子中,我们使用rotate函数来旋转vector容器中的元素。
实例16:使用remove删除元素
#include <iostream>
#include <vector>
#include <algorithm>
int main() {
std::vector<int> vec = {1, 2, 3, 4, 5, 3, 2};
auto it = std::remove(vec.begin(), vec.end(), 3);
vec.erase(it, vec.end());
for (int i = 0; i < vec.size(); ++i) {
std::cout << vec[i] << " ";
}
std::cout << std::endl;
return 0;
}
在这个例子中,我们使用remove函数来删除vector容器中满足条件的元素。
实例17:使用count计算元素数量
#include <iostream>
#include <vector>
#include <algorithm>
int main() {
std::vector<int> vec = {1, 2, 3, 4, 5, 3, 2};
int count = std::count(vec.begin(), vec.end(), 3);
std::cout << "Count: " << count << std::endl;
return 0;
}
在这个例子中,我们使用count函数来计算vector容器中满足条件的元素数量。
实例18:使用accumulate进行求和操作
#include <iostream>
#include <vector>
#include <numeric>
int main() {
std::vector<int> vec = {1, 2, 3, 4, 5};
int sum = std::accumulate(vec.begin(), vec.end(), 0);
std::cout << "Sum: " << sum << std::endl;
return 0;
}
在这个例子中,我们使用accumulate函数来计算vector容器中元素的总和。
实例19:使用adjacent_find查找相邻重复元素
#include <iostream>
#include <vector>
#include <algorithm>
int main() {
std::vector<int> vec = {1, 2, 2, 3, 4, 5, 5};
auto it = std::adjacent_find(vec.begin(), vec.end());
if (it != vec.end()) {
std::cout << "Adjacent find: " << *it << std::endl;
} else {
std::cout << "Not found." << std::endl;
}
return 0;
}
在这个例子中,我们使用adjacent_find函数来查找vector容器中相邻重复的元素。
实例20:使用search_n查找连续元素
#include <iostream>
#include <vector>
#include <algorithm>
int main() {
std::vector<int> vec = {1, 2, 2, 3, 4, 5, 5};
auto it = std::search_n(vec.begin(), vec.end(), std::make_pair(2, 2), std::make_pair(3, 3));
if (it != vec.end()) {
std::cout << "Search n: " << *it << std::endl;
} else {
std::cout << "Not found." << std::endl;
}
return 0;
}
在这个例子中,我们使用search_n函数来查找vector容器中连续出现的元素。
通过以上20个实用实例,相信你已经对STL编程有了更深入的了解。在实际开发中,灵活运用STL可以帮助你更高效地解决问题,提高代码质量。希望这些例子能够帮助你更好地掌握C++标准库,让你的编程之路更加顺畅!
