如果函数接受参数vector<int>&
,那究竟是什么意思?这与说出向量中包含的指针的值是一样的吗?我完全理解vector<int&>
;关于&
在外面的事情让我感到兴奋。
答案 0 :(得分:1)
vector<int>&
是对向量的引用,vector<int&>
是int引用的向量,实际上vector<int&>
根本不会编译,更详细:
Why can't I make a vector of references?
答案 1 :(得分:0)
如果没有&
,矢量的副本将被传递给函数
=所有元素的副本。更改/插入/删除...不会影响原始矢量
(如果你有一个指针或类似的东西,它们仍然指向同一个东西,但指针本身也被复制)。
使用&
,您在函数中将拥有相同的向量,并且所有修改也将在外部可见。另外,如果它不是nessecary,可能更快不复制所有内容(可能是因为整个移动语义和协议主题)。
答案 2 :(得分:0)
它是一个引用,其中引用的对象具有类型vector<int>
。
除了类型之外,这与任何其他参考都是一样的。如果您不熟悉参考文献,则可以为同一变量提供多个标签:
int a = 5;
int &b = a;
// now "a" and "b" are both labels for the same variable. any
// expression involving `a` can have that exchanged for `b`
// without making any difference.
a = 6;
std::cout << b << std::endl; // 6
在你谈论的情况下:
void func( vector<int> &b ) { b.push_back(6); }
int main()
{
vector<int> a;
func(a);
std::cout << a[0] << std::endl; // 6
}
这意味着a
和b
都是同一向量的标签。
我完全理解
vector<int&>
vector<int&>
是非法的,所以希望您能够完全理解&#34;这是非法的。不可能有引用的数组或容器。
答案 3 :(得分:0)
当一个函数接受“vector&amp;”时据说通过引用传递。假设您的矢量引用参数名为vec。假设您要为整数向量中的所有元素指定0。您可以输入:
int assign_zero(vector<int> vec){
for(auto &x : vec){
x = 0;
}
}
有了这个,您可以在主方法中输入如下内容:
originalVector = assign_zero(originalVector);
你也可以使用函数中对向量的引用来完成同样的事情(注意函数现在是无效的):
void assign_zero(vector<int>& vec){
for(auto &x : vec){
x = 0;
}
}
现在,函数assign_zero()不是直接修改向量,而是从内存中的originalVector创建新的零向量,然后将其分配回原始向量。这允许您使用这样的函数调用,其中不创建额外的向量:
assign_zero(originalVector);
请注意,带矢量引用的函数不需要为空。