C++ - 传入一个 vector 并返回一个 vector

标签 c++ vector

很抱歉这个菜鸟问题,但是举例来说,我已经有一个用 C++ 编写的 Excel 加载项,它接受一个数字并返回数字的平方(比如 inputNum 和 outputNum,其中 outputNum = inputNum^2)和现在我需要修改函数,使输入是一个 1xn vector ,输出是一个大小相同且数字平方的 vector ,我需要修改什么才能让它工作?举例来说,我是否需要将输入更改为指针,因为 C++ 不会直接将 vector 作为 native 类型(与原始 square 函数中的 double 不同)。

谢谢!

最佳答案

std::transform函数是执行此操作的好方法:

#include <vector>
#include <algorithm>
#include <iostream>

double processElement(double e) {
    return e * e;
}

std::vector<double> processAllElements(const std::vector<double>& in) {
    // The output vector must be constructed to be the same size as the input.
    std::vector<double> out(in.size(), 0);

    // Process each element in the input vector into the output vector.
    // (input is unchanged)
    std::transform(in.begin(), in.end(), out.begin(), &processElement);
    return out;
}

int main() {
    std::vector<double> in;
    in.push_back(1);
    in.push_back(2);

    std::vector<double> out = processAllElements(in);

    std::cout << out[0] << "," << out[1];
}

如果您正在处理指向值缓冲区的原始指针,您仍然可以使用 std::transform

int main() {
    const int n = 3;
    double in[] = {1,2,3};
    double out[n];

    std::transform(in, in+n, out, &processElement);

    std::cout << out[0] << "," << out[1];
}

但是如果在编译时不知道你的 vector 大小,你最好使用 std::vector 来为你管理内存。

关于C++ - 传入一个 vector 并返回一个 vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18933791/

相关文章:

c++ - 将数字包装在结构中以避免隐式转换的优缺点

c++ - operator= 和 C++ 中未继承的函数?

c++ - 带有使用模板的方法的嵌套结构

C++ 可变参数模板迭代 vector 并比较元素

c++ - 在 C++ 列表中按字母顺序插入字符串

c++ - 如何使用文件存储从 xml 文件中读取 vector<vector<Point3f>>

c++,从文件读取到结构,然后读取到 vector (结构被插入 vector 太多次而不是一次)

c++ - 使用 Frank Luna 的技术创建 3d 平面 : what are sinf and cosf?

performance - 附加到向量的效率

c++ - 对象 vector