c++ - 实现 B=f(A),使用 B 和 A 数组并且 B 已经定义

标签 c++ arrays function

假设我有一个数组 B,它已经在 C++ 代码中的某处定义和使用。现在,假设我有另一个已定义和初始化的数组 A。我想创建一个函数 f 来转换 A(例如,FFT)并且我希望转换的结果分配给 B (当然,随着A的转换,B的值也会发生变化)。我想通过保持语法来完成这一切

B=f(A);

即,不将 B 的地址作为参数传递给 f。是否可能:

  1. 没有创建临时文件?
  2. 创建临时对象,但没有内存泄漏?

谢谢。

编辑:以下答案中提供的解决方案摘要

感谢 RiaD、James Kanze、Shahbaz 和 Razispio 的回答。

我要问的是要求 AB 成为数组类的对象,以获得效率和有效性。此外,在“标准”实现中,例如,使用配备复制构造函数的数组类,B=f(A); 之类的语法将需要创建临时对象。然而,应该提到的是,临时变量不一定是限制,因为许多编译器能够省略额外的临时变量。与此相反,像 f(A,B); 这样的语法会避免临时变量。使用表达式模板的解决方案启用语法B=f(A);,同时在内部使用f(A,B);,使使用临时工可以忽略不计。一种有效的替代解决方案是使用移动赋值运算符,例如参见

Move semantics and rvalue references in C++11

有关详细信息,请参阅下面提供的答案。

最佳答案

最简单的方法是使用 std::vectorstd::array

例子:

vector<int> f(const vector<int>& a) {
   return a;
}

b = f(a);

实际上,你不必使用其中一个类来存储,你可以使用你自己的类,它有 operator =

YourClass& operator = (const vector<int>&/* there will be returned value of f, it may be std::array, std::vector or your own class.*/ v) {
    //fill it here.
    return *this;
}

您也可以为其提供移动构造函数以避免不必要的复制。

例如

class Array {
    int* data;   
    YourClass& operator = (YourClass&& v) {
        swap(v.data, data);
    }
}

YourClass f(const YourClass& a) {
   //
}

Array a,b;
b = f(a);

关于c++ - 实现 B=f(A),使用 B 和 A 数组并且 B 已经定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16254797/

相关文章:

c++ - 在标题中转发声明并包含在 CPP 中?

php插入preg_match_all数组

javascript - JS 在对象数组上使用indexOf

arrays - 是否有任何 Hive 数组比较函数/udf

function - 您如何称呼这种函数式语言功能?

c++ - 如何在静止图像opencv c++中执行canny edge后识别汽车

C++:访问父方法和变量

sql - 如何创建pl sql函数以检查数据库中是否存在数据

c++ - 使用一个动态分配的内存块创建 2d 或 3d 数组

function - 是否有excel vb的功能可以连续检查工作表?