我对创建变量的别名感到困惑,需要你的帮助。
目的
我的函数有两个向量,但我想确保向量变量“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;
}
有没有办法解决这个问题?非常感谢你。
答案 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 ...
}