Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/154.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 我不知道如何在向量通过循环后将其传递回main #包括 #包括 使用名称空间std; 向量斐波那契(整数x,整数y,向量vi,整数n){ vi[0]=x; vi[1]=y; 对于(int i=2;i_C++ - Fatal编程技术网

C++ 我不知道如何在向量通过循环后将其传递回main #包括 #包括 使用名称空间std; 向量斐波那契(整数x,整数y,向量vi,整数n){ vi[0]=x; vi[1]=y; 对于(int i=2;i

C++ 我不知道如何在向量通过循环后将其传递回main #包括 #包括 使用名称空间std; 向量斐波那契(整数x,整数y,向量vi,整数n){ vi[0]=x; vi[1]=y; 对于(int i=2;i,c++,C++,对于直接的问题,您刚刚错过了将函数返回值赋回vi #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];

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

#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);
}
编辑: 不过,还有一些其他问题,比如您从未在向量上实际分配过空间,而是将值传递给函数并返回它。由于您似乎不想更改原来的值,所以只需使用本地
向量

rv = fibonacci(x,y,vi,n);
向量斐波那契(int x,int y,int n){ 向量vi(n);
您可以通过引用而不是通过值来传递向量。为此,请将函数的声明更改为

vector<int> fibonacci(int x, int y,int n){
    vector<int> vi(n);
void fibonacci(intx,inty,vector&vi,intn){。。。

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

您甚至不应该传入一个vector,只需创建一个新的vector并返回:

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

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

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

  • 必须分配向量中的元素,不能像在javascript中那样只使用
    v[i]=x
    分配给它们。要么先给向量指定一个大小,要么使用
    push\u
    添加元素

  • 显然,您不知道按值传递和按引用传递之间的区别

但是最大的错误是你尝试通过实验来学习C++,这是一个自杀的原因。
更容易和更好的是通过先读一本好书来学习C++。你可以找到一个列表。< /P>请修改你的代码格式^ ^ ^他说的。强调你的代码并点击按钮。欢迎到栈溢出。我想帮忙,你的问题是如此模糊,我真的不知道你在做什么。你能澄清吗?你的问题?+ 1,“通过实验学习C++是自杀的方法”。在开发了一些专门知识之后,它变得更有效。
std::vector<int> fibonacci(int x, int y, int n)
{
    std::vector<int> vi(n);
    vi[0] = x;
    vi[1] = y;
    //etc...
    return vi;
}
vi = fibonacci(x,y,n);