是否可以交换在c ++ ex中的函数func(say)中作为参数传递的const向量的两个元素:vector <int> func(const vector <int>&v){}?

sus*_*haw 1 c++ pointers const vector

我们可以在不使用任何额外空间的情况下交换向量v的元素并返回v吗?

vector<int>func(const vector<int>&v)
{
   //write your code here
}
Run Code Online (Sandbox Code Playgroud)

Max*_*kin 6

该函数按值返回向量,这意味着它会复制输入。因此,您可以显式制作副本,修改副本并返回它。例如:

vector<int> func(vector<int> const& v) {
    vector<int> u(v);
    // modify u.
    return u;
}
Run Code Online (Sandbox Code Playgroud)

也可以使调用者复制该参数vector<int> func(vector<int> u),但是禁用返回值优化,因此将复制2个向量(一个用于函数参数,另一个用于返回)。有关详细信息,请参见复制省略号

在return语句中,当操作数是具有自动存储持续时间的非易失性对象的名称时,该对象不是函数参数或catch子句参数,并且具有与(cv-qualification)相同的类类型函数返回类型。复制省略的这种变体称为NRVO,“命名为返回值优化”。

要就地修改向量而不进行复制,该函数必须引用非const向量:

vector<int>& func(vector<int>& v) {
    // modify v.
    return v;
}
Run Code Online (Sandbox Code Playgroud)