Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/146.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 向量引用到底是什么?_C++_Vector_Reference_Pass By Reference - Fatal编程技术网

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);