将预先声明但未初始化的矢量设置为另一个别名
问题描述:
在下面的代码中,我想将矢量v
设置为矢量in
,但未复制其内容,但由于v已被声明,因此无法使用像vector<int> &v = in
这样的引用。我应该做些什么来防止复制?从不是到作为一个别名将预先声明但未初始化的矢量设置为另一个别名
class pt
{
private:
vector<int> v;
int size;
public:
void construct(int n)
{
for (int i = n - 1; i >= 0; --i)
{
v[i] = v[i - 1] + v[i - 2];
}
}
pt(vector<int>& in, bool no_Copy = false)
{
if (no_Copy)
{
&v = in; //I want to fix this
}
else {}
construct(in.size());
}
//other functions which use `v`
};
答
喜欢的东西
vector<int> v;
不能是 “切换”。
您可以使其始终为别名,在一种情况下,它指的是传入的in
矢量,另一种情况下指的是in
矢量的副本。
例如:
class pt
{
private:
vector<int>& v;
vector<int> v_copy;
...
pt(vector<int>& in, bool no_Copy = false)
: v(no_Copy ? in : v_copy)
{
if(!no_Copy) v_copy = in;
}
或者你也可以从in
移动,如@Carl在注释建议。这很快,但会破坏in
载体。
声明“将矢量A设置为矢量B而不复制其内容”在C++中没有任何意义。这就像是说:“拿着左边闪亮球的盒子,把这个盒子放在你的右边,但是没有在盒子里面移动任何闪亮的球,它们必须留在你的左边。 –
我认为这可能是一个[ XY问题](https://meta.stackexchange.com/questions/66377/what-is-the-xy-problem)。你真正想要解决的问题是什么?'pt'的目的是什么? – Brian
@SamVarshavchik我的意思是类似于像'vector&v ='这样的参考文件' –
user8611116