如何将向量传递给函数参数(我需要指针吗?)

阿比·萨卡尔

当我们将一个向量传递给一个函数时,为什么我们不能像数组那样做呢?

例如:

#include<bits/stdc++.h> 
using namespace std;


void func(vector<int> vect)
{
    vect.push_back(30);
}

int main()
{
    vector<int> vect;
    vect.push_back(10);
    vect.push_back(20);

    func(vect);

    for (int i = 0; i<vect.size(); i++)
        cout << vect[i] << " ";

    return 0;
}

在这个例子中,它工作正常。但是如果我这样做,为什么它不像数组那样工作?

#include<bits/stdc++.h> 
using namespace std;

void func(vector<int> *vect)
{
    vect.push_back(30);
}

int main()
{
    vector<int> vect;
    vect.push_back(10);
    vect.push_back(20);

    func(&vect[0]);

    for (int i = 0; i<vect.size(); i++)
        cout << vect[i] << " ";

    return 0;
}

就像数组一样,为什么这是不可能的?

阿纳斯塔丘

很有可能,但是您传递的是向量的元素,而不是向量本身:

void func(vector<int> *vect) {
    vect->push_back(30);   // <-- pointer type expression
}

int main() {

    vector<int> vect;
    vect.push_back(10);
    vect.push_back(20);

    func(&vect); // <-- pass the vector

    for (size_t i = 0; i < vect.size(); i++) // <-- iterator should be size_t type
        cout << vect[i] << " ";

    return 0;
}

如果您想传递对向量元素的引用,您也可以这样做,请注意,该元素必须已经存在:

void func(int *vect_elem) {  //<-- pointer to int parameter
    *vect_elem = 30; // <-- assign 30 to the vector element
}

int main() {

    vector<int> vect;
    vect.push_back(10);
    vect.push_back(20);

    func(&vect[0]); //<-- reference an existing element of the vector

    for (size_t i = 0; i<vect.size(); i++)
        cout << vect[i] << " ";

    return 0;
}

在这种特殊情况下,您不需要指针,更好的选择是仅使用引用,就像已经提到的那样,因为您不需要任何取消引用:

void func(vector<int> &vect) { //<-- parameter reference
    vect.push_back(30); 
}

int main() {

    vector<int> vect;
    vect.push_back(10);
    vect.push_back(20);

    func(vect); // <-- pass the vector

    for (size_t i = 0; i < vect.size(); i++)
        cout << vect[i] << " ";

    return 0;
}
void func(int &vect_elem) { //<-- parameter reference
    vect_elem = 30;
}

int main() {

    vector<int> vect;
    vect.push_back(10);
    vect.push_back(20);

    func(vect[0]); //<-- pass the element

    for (size_t i = 0; i<vect.size(); i++)
        cout << vect[i] << " ";

    return 0;
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Python,如何将参数传递给函数指针参数?

如何将向量传递给函数的点(...)参数

如何将参数传递给C中的函数指针?

如何将lambda传递给需要类参数的函数

如何将指针传递给指针向量?

如何将智能指针传递给需要原始指针的函数?

如何将函数对象传递给需要void *指针的函数

如何将参数传递给函数?

如何将指针传递给在 C++ 中作为引用传递参数的函数

如何将向量元素作为参数传递给可变参数模板函数?

如何将数值向量传递给通用向量函数?

如何将函数指针传递给成员函数C ++?

如何将向量元素作为单个参数传递给 R 中的函数

如何将向量作为变量参数传递给 R 中的函数

如何将命名参数传递给另一个函数需要的函数?

如何将成员函数作为回调参数传递给需要`typedef-ed`自由函数指针的函数?

C ++:将指针向量传递给函数

如何将唯一指针传递给函数所需的特定参数?

如何将指针/数组作为参数传递给 GTK 回调函数?

将参数传递给函数:我需要使用别名吗?

如何将值传递给指针参数C ++

如何将数组和结构传递给需要3个u32指针作为参数的c函数(ctypes)

如何将值向量传递给函数?

如何将字符串作为参数传递给需要R中的变量的函数

如何将文件指针传递给其他函数

如何将指针传递给模板类的成员函数?

如何将指针传递给UpdateProcThreadAttribute函数的句柄列表

如何将指向结构的指针传递给构造函数?

C指针,了解如何将数组传递给函数