c++ auto举个实例说明
时间: 2023-05-20 13:01:31 浏览: 69
当我们在编写 C++ 代码时,有时候需要让编译器自动推导变量的类型,这时候就可以使用 auto 关键字。例如:
auto x = 10; // 编译器会自动推导 x 的类型为 int
auto y = 3.14; // 编译器会自动推导 y 的类型为 double
auto z = "hello"; // 编译器会自动推导 z 的类型为 const char*
使用 auto 可以简化代码,提高代码的可读性和可维护性。
相关问题
举一个C++的实例
以下是一个使用 C++ 实现的简单的上下文无关文法(CFG)的示例:
```cpp
#include <iostream>
#include <vector>
#include <string>
using namespace std;
// 定义 CFG 的产生式规则
struct Rule {
string non_terminal; // 非终结符
vector<string> rhs; // 右部
};
// 定义 CFG
class CFG {
public:
CFG() {}
// 添加一个产生式规则
void add_rule(string non_terminal, vector<string> rhs) {
Rule rule;
rule.non_terminal = non_terminal;
rule.rhs = rhs;
rules.push_back(rule);
}
// 获取CFG的所有产生式规则
vector<Rule> get_rules() const {
return rules;
}
private:
vector<Rule> rules; // 产生式规则
};
int main() {
// 创建 CFG
CFG cfg;
// 添加产生式规则
cfg.add_rule("S", {"aSb"});
cfg.add_rule("S", {"c"});
// 获取 CFG 的所有产生式规则
vector<Rule> rules = cfg.get_rules();
// 输出 CFG 的所有产生式规则
for (auto rule : rules) {
cout << rule.non_terminal << " -> ";
for (auto symbol : rule.rhs) {
cout << symbol << " ";
}
cout << endl;
}
return 0;
}
```
在上面的示例中,我们定义了一个 `Rule` 结构体来表示 CFG 的一条产生式规则,包括非终结符和右部。通过 `CFG` 类,我们可以添加产生式规则,并使用 `get_rules()` 方法获取 CFG 的所有产生式规则。最后,我们使用一个简单的循环将 CFG 的所有产生式规则输出到控制台。
C++多线程应用实例
C++多线程可以应用于各种场景,以下是一个简单的多线程应用实例:
假设我们有一个任务,需要计算一个数组中所有元素的平方和。我们可以使用多线程来加速计算过程。
首先,我们创建一个包含大量元素的数组,并将其分成几个部分。然后,我们创建多个线程,每个线程负责计算其中一部分数组元素的平方和。最后,将每个线程计算得到的结果相加,即可得到整个数组的平方和。
下面是一个简单的示例代码:
```cpp
#include <iostream>
#include <thread>
#include <vector>
// 计算数组部分元素的平方和
int calculateSum(const std::vector<int>& arr, int start, int end) {
int sum = 0;
for (int i = start; i < end; ++i) {
sum += arr[i] * arr[i];
}
return sum;
}
int main() {
std::vector<int> arr = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
int numThreads = 4; // 假设使用4个线程
std::vector<std::thread> threads;
std::vector<int> partialSums(numThreads);
// 创建并启动多个线程
for (int i = 0; i < numThreads; ++i) {
int start = i * arr.size() / numThreads; int end = (i + 1) * arr.size() / numThreads;
threads.emplace_back([start, end, &arr, &partialSums, i]() {
partialSums[i] = calculateSum(arr, start, end);
});
}
// 等待所有线程完成
for (auto& thread : threads) {
thread.join();
}
// 计算最终结果
int totalSum = 0;
for (int sum : partialSums) {
totalSum += sum;
}
std::cout << "数组的平方和为:" << totalSum << std::endl;
return 0;
}
```
在上述示例中,我们使用了`std::thread`来创建多个线程,并使用`std::vector`来保存每个线程计算得到的部分结果。最后,我们将所有部分结果相加得到最终结果。