我无法弄清楚如何在向量循环后将向量传递回main

时间:2011-02-18 22:23:19

标签: c++

#include <vector>

#include <iostream>

using namespace std;

vector<int> fibonacci(int x, int y,vector<int> vi,int n){

    vi[0]=x;
    vi[1]=y;

   for(int i=2;i<n;i++){

       x=vi[i-2];
       y=vi[i-1];
       vi[i]=x+y;

       cout<<vi[i]<<" "<<endl;

   }
return vi;

}

void printv(string label, vector<int> vi, int n){

   cout<<label<<" "<<endl;
   for (int j=0; j<n; j++)
       cout<<vi[j]<<" "<<endl;

}
/*void reverseV(vector<int> vi,int n)
{
    vector<int> rv= vi;
    for (int i=rv.size()-1; i>=0; i--) {
            cout << rv[i] << endl;
        }*/
//}

int main()
{
    int x;
    int y;
    vector<int> vi;
    vector<int> rv;
   int n=100;
string label;
   cout<<"enter the max number of times you want it to add"<<endl;

   cin>>n;
cout<<"enter the first two fibonacci numbers"<<endl;
cin>>x>>y;
   fibonacci(x,y,vi,n);
 printv("vector: ",vi,n);
 printv("vector: ",rv,n);
 //vi.swap(rv);
}

4 个答案:

答案 0 :(得分:4)

你甚至不应该传入一个向量,只需创建一个向量并返回:

std::vector<int> fibonacci(int x, int y, int n)
{
    std::vector<int> vi(n);
    vi[0] = x;
    vi[1] = y;
    //etc...
    return vi;
}

然后,在main中,您只需捕获此返回值:

vi = fibonacci(x,y,n);

答案 1 :(得分:3)

您的程序包含多个错误,例如:

  • std::vector已知道所包含元素的数量,如果传递矢量,则无需指定大小。

  • 必须分配向量中的元素,您不能只使用v[i]=x分配给它们,就像您可以做的那样在javascript中。您可以先向矢量指定大小,也可以使用push_back添加元素。

  • 显然你不知道传递值和参考值之间的区别。

但最大的错误是你试图通过实验来学习C ++,而且出于多种原因这是一种自杀式的方法。

通过阅读一本好书来学习C ++会更容易和更好。您可以找到列表here

答案 2 :(得分:2)

对于直接问题,您错过了将函数的返回值分配回vi

rv = fibonacci(x,y,vi,n);

编辑: 还有一些其他问题,比如你从未在向量上实际分配过空间,并且你将值传递给函数并返回它。由于您似乎不想更改原件,只需使用本地vector

vector<int> fibonacci(int x, int y,int n){
    vector<int> vi(n);

答案 3 :(得分:2)

您可以通过引用而不是按值传递矢量。要实现此目的,请将函数声明更改为

void fibonacci(int x, int y,vector<int>& vi,int n){ ...

这样您就可以在函数内部处理相同的矢量对象,而不仅仅是它的副本。因此,您对向量所做的每个更改都在函数外部可见。