我正在尝试将向量传递给另一个函数,我不太了解它是如何工作的。
这是将向量传递给函数,我短暂地搜索了是否可以使用指向该向量的指针,但没有成功。
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);
}
我希望我的代码能够成功将向量传递给函数, 现在我知道这是错误的,并且会给我一个错误。
答案 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将被排序。