如何将向量传递给C ++中的函数?

时间:2019-03-31 20:10:02

标签: c++ function vector

我正在尝试将向量传递给另一个函数,我不太了解它是如何工作的。

这是将向量传递给函数,我短暂地搜索了是否可以使用指向该向量的指针,但没有成功。

void sort(to_sort, len)
{
    //code here uses the vector
}

int main()
{
    std:vector <int> to_string;
    int len = 8;
    //loops len times, adding number to to_sort
    for (i = 0; i < len; i++)
    {
        int n;
        std::cout << "enter a number: ";
        std::cin >> n;
        to_sort.push_back(n);
    }
    sort(to_sort, len);
}

我希望我的代码能够成功将向量传递给函数, 现在我知道这是错误的,并且会给我一个错误。

2 个答案:

答案 0 :(得分:1)

您必须为参数指定类型。由于您使用的是std::vector,因此也不需要将len传递到函数中。您已经可以使用size()成员函数来获取向量的长度:例如 to_sort.size()

您的函数显然打算修改呼叫者的引导程序,以使呼叫者看到这些更改。在这种情况下,您必须通过 reference

void sort(std::vector<int> & to_sort)
{
    // do the thing
}

您的程序中也存在其他非常基本的错误:

  • std:vector缺少第二个冒号
  • 未定义变量i
  • to_sort未在main中定义-您的意思是to_string
  • 您不处理输入中可能出现的流错误

您可以按以下步骤解决这些问题:

int main()
{
    std::vector<int> to_string;
    for (int n; to_string.size() < 8 && std::cin >> n; )
    {
        to_string.push_back(n);
    }

    sort(to_string);

    // Maybe you want to output the values too:
    for (int val : to_string) std::cout << val << std::endl;
}

答案 1 :(得分:0)

最简单的方法是使用迭代器进行排序。

例如参见http://www.cplusplus.com/reference/algorithm/sort/完成您想做的事情。

在您的情况下,您可以按以下方式编写函数:

void sort(std::vector<int> & to_sort)
{
     std::sort(to_sort.begin(), to_sort.end());
}

由于使用了std :: vector,该向量被引用复制,因此输入向量本身将被更改。因此,当您调用该函数时,输入向量将重新排序。如果要允许除int之外的其他类型,可以将其放在模板函数中,但是坦率地说,根本不需要此函数。只需在主程序中调用std :: sort方法即可。

您需要将主输入更改为sort(to_string)。调用sort方法后,to_string将被排序。