C++11作为C++语言的一次重大更新,引入了大量的新特性和改进,使得编程变得更加高效和易用。本文将重点解析C++11中的高效并发编程与STL容器实战技巧,帮助读者深入理解并掌握这些特性。
高效并发编程
1. 任务的并发执行
C++11引入了<thread>库,使得创建和管理线程变得非常简单。以下是一个简单的例子,展示如何使用std::thread来并发执行两个任务:
#include <iostream>
#include <thread>
void task1() {
std::cout << "Hello from task 1" << std::endl;
}
void task2() {
std::cout << "Hello from task 2" << std::endl;
}
int main() {
std::thread t1(task1);
std::thread t2(task2);
t1.join();
t2.join();
return 0;
}
2. 互斥量与同步
为了确保线程安全,C++11提供了多种同步机制,如互斥量(mutex)、条件变量(condition_variable)和原子操作(atomic)。
以下是一个使用互斥量保护共享资源的例子:
#include <iostream>
#include <thread>
#include <mutex>
std::mutex mtx;
int count = 0;
void increment() {
for (int i = 0; i < 1000; ++i) {
mtx.lock();
++count;
mtx.unlock();
}
}
int main() {
std::thread t1(increment);
std::thread t2(increment);
t1.join();
t2.join();
std::cout << "Count: " << count << std::endl;
return 0;
}
3. future和promise
std::future和std::promise是用于异步编程的高级机制,允许在多个线程之间传递结果。
以下是一个使用std::future和std::promise的例子:
#include <iostream>
#include <future>
int add(int x, int y) {
return x + y;
}
int main() {
std::future<int> f = std::async(std::launch::async, add, 2, 3);
std::cout << "Sum: " << f.get() << std::endl;
return 0;
}
STL容器实战技巧
C++11对STL容器也进行了一些改进,以下是一些实用的技巧:
1. 智能指针
C++11引入了智能指针,如std::unique_ptr和std::shared_ptr,用于自动管理资源,避免内存泄漏。
以下是一个使用std::unique_ptr的例子:
#include <iostream>
#include <memory>
int main() {
std::unique_ptr<int> p(new int(42));
std::cout << *p << std::endl;
return 0;
}
2. lambda表达式
Lambda表达式提供了一种更简洁的方式编写匿名函数。
以下是一个使用lambda表达式的例子:
#include <iostream>
#include <vector>
#include <algorithm>
int main() {
std::vector<int> v = {1, 2, 3, 4, 5};
std::sort(v.begin(), v.end(), [](int a, int b) { return a < b; });
for (int i : v) {
std::cout << i << " ";
}
std::cout << std::endl;
return 0;
}
3. 范围for循环
C++11允许使用范围for循环遍历容器。
以下是一个使用范围for循环的例子:
#include <iostream>
#include <vector>
int main() {
std::vector<int> v = {1, 2, 3, 4, 5};
for (int i : v) {
std::cout << i << " ";
}
std::cout << std::endl;
return 0;
}
通过掌握C++11中的高效并发编程与STL容器实战技巧,您将能够编写出更加高效、易维护的代码。希望本文对您有所帮助!
