C++ 向量引用到底是什么?
如果函数接受一个参数C++ 向量引用到底是什么?,c++,vector,reference,pass-by-reference,C++,Vector,Reference,Pass By Reference,如果函数接受一个参数向量&,这到底意味着什么?这是否与表示向量中包含的指针的值相同?我完全理解向量;只是一些关于&在外面的事情让我感到困惑 不使用&时,向量的副本将传递给函数。 =所有元素的副本。更改/插入/删除。。。不会影响原始向量。 (如果你有一个指针向量或类似的东西,它们仍然会指向同一个东西,但指针本身也会被复制) 有了&功能,您将在函数中拥有相同的向量,所有修改也将对外可见。此外,如果不是nessecary(可能是因为整个move semantics&co.主题),那么不复制所有内容可能
向量&
,这到底意味着什么?这是否与表示向量中包含的指针的值相同?我完全理解向量;只是一些关于&
在外面的事情让我感到困惑 不使用&
时,向量的副本将传递给函数。=所有元素的副本。更改/插入/删除。。。不会影响原始向量。
(如果你有一个指针向量或类似的东西,它们仍然会指向同一个东西,但指针本身也会被复制)
有了
&
功能,您将在函数中拥有相同的向量,所有修改也将对外可见。此外,如果不是nessecary(可能是因为整个move semantics&co.主题),那么不复制所有内容可能会更快。它是一个引用,其中被引用的对象具有类型向量
除了类型之外,这与任何其他引用都是一样的。如果您不熟悉引用,它们是为同一变量提供多个标签的一种方式:
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
inta=5;
int&b=a;
//现在“a”和“b”都是同一变量的标签。任何
//包含'a'的表达式可以将其替换为'b'`
//没有任何区别。
a=6;
std::cout向量&
是对向量的引用,向量
是int引用的向量,事实上向量
不会编译,更详细:
当函数接受“vector&”时,它被称为通过引用传递。假设向量引用参数名为vec。假设您希望将0分配给int向量中的所有元素。您可以键入:
int assign_zero(vector<int> vec){
for(auto &x : vec){
x = 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);