在现代C++中,可以使用标准库中的std::transform
函数或者基于范围的for循环结合lambda表达式来实现将一种类型的列表映射到另一种类型的列表。以下是两种方法的示例:
std::transform
#include <iostream>
#include <vector>
#include <algorithm>
int main() {
std::vector<int> input = {1, 2, 3, 4, 5};
std::vector<double> output(input.size());
// 使用std::transform将int类型的列表映射到double类型的列表
std::transform(input.begin(), input.end(), output.begin(), [](int i) {
return static_cast<double>(i) * 1.5; // 映射规则:乘以1.5
});
// 输出结果
for (const auto& val : output) {
std::cout << val << " ";
}
std::cout << std::endl;
return 0;
}
#include <iostream>
#include <vector>
int main() {
std::vector<int> input = {1, 2, 3, 4, 5};
std::vector<double> output;
// 使用基于范围的for循环和lambda表达式进行映射
std::for_each(input.begin(), input.end(), [&output](int i) {
output.push_back(static_cast<double>(i) * 1.5); // 映射规则:乘以1.5
});
// 输出结果
for (const auto& val : output) {
std::cout << val << " ";
}
std::cout << std::endl;
return 0;
}
std::transform
:C++标准库中的一个算法,用于对容器中的元素进行转换操作。std::for_each
:C++标准库中的另一个算法,用于对容器中的每个元素执行指定的操作。std::vector
的reserve
方法预留足够的空间,避免频繁的内存重新分配。std::vector
的reserve
方法预留足够的空间,避免频繁的内存重新分配。通过以上方法和注意事项,可以有效地在现代C++中将一种类型的列表映射到另一种类型的列表。
领取专属 10元无门槛券
手把手带您无忧上云