创建变量的别名?

时间:2015-11-21 03:21:09

标签: c++ alias

我对创建变量的别名感到困惑,需要你的帮助。

目的

我的函数有两个向量,但我想确保向量变量“a”将引用较长的。同时,我不想复制矢量。所以,我使用引用来创建一个别名,但我陷入了两难境地。

情况1

由于变量在if子句中,因此无法看到变量,但我需要if子句来知道哪个更长.......

vector<float> conv(const vector<float> &operand1, const vector<float> &operand2){


if (operand1.size() < operand2.size()){
     const vector<float> &a = operand2;
     const vector<float> &b = operand1;
}
else{
    const vector<float> &a = operand1;
    const vector<float> &b = operand2;
}

情况2

在if子句之外声明引用。不幸的是,引用必须在声明时初始化。但是,我需要if子句来知道将其声明为哪个操作数。

vector<float> conv(const vector<float> &operand1, const vector<float> &operand2){

const vector<float> &a;
const vector<float> &b;

if (operand1.size() < operand2.size()){
     &a = operand2;
     &b = operand1;
}
else{
     &a = operand1;
     &b = operand2;
}

有没有办法解决这个问题?非常感谢你。

2 个答案:

答案 0 :(得分:1)

这是你想要的吗?

vector<float> conv(const vector<float>& op1, const vector<float>& op2) {
    const vector<float> &a = op1.size() < op2.size() ? op2 : op1; // the longer one
    const vector<float> &b = op1.size() < op2.size() ? op1 : op2; // the other
    ...
}

答案 1 :(得分:0)

您可以使用指针而不是引用:

vector<float> conv(const vector<float> &operand1, const vector<float> &operand2)
{
    const vector<float> *a;
    const vector<float> *b;

    if (operand1.size() < operand2.size())
    {
        a = &operand2;
        b = &operand1;
    }
    else
    {
        a = &operand1;
        b = &operand2;
    }

    // use *a and *b as needed ...
}