MST

星途 面试题库

面试题:C++中transform结合复杂自定义操作

给定两个`std::vector<int>`,分别为`vec1`和`vec2`,它们的大小相同。使用`std::transform`和自定义操作,将`vec1`和`vec2`对应位置的元素进行以下操作:如果`vec1`中的元素大于`vec2`中的元素,则结果为两者之和;否则结果为两者之差。将结果存储到第三个`std::vector<int>`中。要求使用C++11及以上特性,写出高效且正确的代码,并说明可能存在的性能优化点。
36.2万 热度难度
编程语言C++

知识考点

AI 面试

面试题答案

一键面试
#include <iostream>
#include <vector>
#include <algorithm>

int customOperation(int a, int b) {
    return a > b? a + b : a - b;
}

std::vector<int> performOperation(const std::vector<int>& vec1, const std::vector<int>& vec2) {
    std::vector<int> result(vec1.size());
    std::transform(vec1.begin(), vec1.end(), vec2.begin(), result.begin(), customOperation);
    return result;
}

int main() {
    std::vector<int> vec1 = {1, 3, 5};
    std::vector<int> vec2 = {2, 4, 4};
    std::vector<int> result = performOperation(vec1, vec2);

    for (int num : result) {
        std::cout << num << " ";
    }
    std::cout << std::endl;

    return 0;
}

性能优化点

  1. 并行化:如果数据量较大,可以使用并行版本的std::transform,例如在C++17及以上版本中,可以使用execution::par策略来并行执行std::transform操作,提高处理速度。
  2. 避免不必要的内存分配:在这个例子中,预先分配result向量的大小可以避免在std::transform过程中多次重新分配内存,提升性能。如果已知向量大小不会改变,尽量避免动态扩容操作。