C++ 通过引用传递向量

C++ 通过引用传递向量,c++,C++,使用普通的C数组,我会这样做: void do_something(int el, int **arr) { *arr[0] = el; // do something else } 现在,我想用向量替换标准数组,并在这里获得相同的结果: void do_something(int el, std::vector<int> **arr) { *arr.push_front(el); // this is what the function above does }

使用普通的C数组,我会这样做:

void do_something(int el, int **arr)
{
   *arr[0] = el;
   // do something else
}
现在,我想用向量替换标准数组,并在这里获得相同的结果:

void do_something(int el, std::vector<int> **arr)
{
   *arr.push_front(el); // this is what the function above does
}
void do\u something(int-el,std::vector**arr)
{
*arr.push_front(el);//上述函数就是这样做的
}
但它显示“表达式必须具有类类型”。如何正确地做到这一点?

void do\u something(int-el,std::vector**arr)
void do_something(int el, std::vector<int> **arr)
应该是

void do_something(int el, std::vector<int>& arr)
{
    arr.push_back(el);
}
void do\u something(int-el,std::vector&arr)
{
arr.push_back(el);
}

传递引用已简化为使用C++中的<代码>和代码> ./p>< p>如果定义函数,以获取<代码> STD::vector和ARR 和整数值的参数,那么可以在函数中使用<代码> PursPoSub/<代码>:

void do_something(int el, std::vector<int>& arr)
{
    arr.push_back(el);
    //....
}
void do\u something(int-el,std::vector&arr)
{
arr.push_back(el);
//....
}
用法:

std::vector<int> arr;
do_something(1, arr); 
std::向量arr;
做某事(1,arr);

您不需要使用**arr,您可以使用:

void do_something(int el, std::vector<int> *arr){
    arr->push_back(el);
}
void do\u something(int-el,std::vector*arr){
arr->推回(el);
}
或:

void do\u something(int-el,std::vector&arr){
arr.push_back(el);
}
**arr毫无意义,但如果您坚持使用它,请按以下方式操作:

void do_something(int el, std::vector<int> **arr){
    (*arr)->push_back(el);
}
void do\u something(int-el,std::vector**arr){
(*arr)->推回(el);
}

但同样没有理由这样做…

您可以通过引用传递向量,如下所示:

void do_something(int el, std::vector<int> &arr){
    arr.push_back(el);
}
void do\u something(int-el,std::vector&arr){
arr.push_back(el);
}
但是,请注意,此函数始终会在向量的后面添加一个新元素,而数组函数实际上会修改第一个元素(或初始化它的值)

为了获得完全相同的结果,您应该写:

void do_something(int el, std::vector<int> &arr){
    if (arr.size() == 0) { // can't modify value of non-existent element
        arr.push_back(el);
    } else {
        arr[0] = el;
    }
}
void do\u something(int-el,std::vector&arr){
if(arr.size()==0){//无法修改不存在元素的值
arr.push_back(el);
}否则{
arr[0]=el;
}
}

通过这种方式,您可以添加第一个元素(如果向量为空)或修改其值(如果已经存在第一个元素)。

您可以通过引用传递容器,以便在函数中修改它。其他答案没有提到的是,
std::vector
没有
push_front
成员函数。您可以使用
vector
上的
insert()
成员函数进行O(n)插入:

void do_something(int el, std::vector<int> &arr){
    arr.insert(arr.begin(), el);
}
void do_something(int el, std::deque<int> &arr){
    arr.push_front(el);
}

int**arr
??如何直接指定二维阵列?如果你需要2d数组,
foo(vector&arr)
。我想他可能是想传递一个指向数组的指针,而不是二维数组。如果我回答错了,请纠正我,但没有人注意到这是一个指针数组,而不是指向数组的指针。他们想要一个<代码> STD::向量。@ TAOCP,你的意思是“通过引用被简化为使用C++中的”,“Gen”,这是一个很差的措辞。C++中真正改变的是它实际上具有通过引用。C没有。它通过传递指针来实现相同的结果,并判定改变指针解引用的结果会修改其原始位置(而不是临时副本)的指向值。但这不是通过参考。指针是按值传递的。@taocp你知道,为什么接受向量数组作为参数会出现错误:
vector&v[100]
void do_something(int el, std::deque<int> &arr){
    arr.push_front(el);
}