如何将数字作为函数参数C 传递到向量



函数翻转采用4个参数。n,向量的元素数量,v向量,i和j,随机数。该功能看起来像这个翻转(n,v,i,j(。它的作用是,它将向量的所有元素从i到j进行逆转。例如翻转(9,[3 2 6 8 5 9 1 7 4],1,6(应返回v = [9 5 8 6 2 3 1 7 4]。

tl/dr:我不知道如何将数字[3 2 6 8 5 9 1 7 4]作为参数,并给予向量这些值。

#include <iostream>
#include <vector>
using namespace std;
void FLIP(int n,vector<int>& v,int i,int j)
{
    int k,l,aux;
    for(k=i;k<=j;k++)
    {
        for(l=j;l>=i;j--)
        {
            aux=v[k];
            v[k]=v[l];
            v[l]=aux;
        }
    }
}
int main()
{
int i,v[50];
FLIP(9,[3 2 6 8 5 9 1 7 4],1,6);
for(i=1;i<=9;i++)
{
    cout<<v[i]<<" ";
}
    return 0;
}

语法将为

{3, 2, 6, 8, 5, 9, 1, 7, 4}

而不是

[3 2 6 8 5 9 1 7 4]

但是,您不能将临时绑定到非常量参考。

您可能会将main更改为:

int main()
{
    std::vector<int> v = {3, 2, 6, 8, 5, 9, 1, 7, 4};
    FLIP(9, v, 1, 6);
    for (auto e : v)
    {
        std::cout << e << " ";
    }
}

问题由于向量的定义矛盾而有些混乱。在main()中,V定义为char数组:v[50]。但是,在另一方面,它被定义为向量。

由于更好的方法是使用std :: vector,因此所有评论都朝着这个方向倾斜。这是一个可能的实现。

#include <iostream>
#include <vector>
using namespace std;
void print_vector(vector<int> v) {
  for(const auto& element: v) {
    cout<<element<<" ";
  }
  cout << "n";
}
void FLIP(int n, vector<int>& v,int i,int j)
{
  // i is 1-based index into vector to starting position
  // j is 1-based index to ending position
  // check to be sure i and j are valid for this vector:
  if(i < 1 || i > j || j > v.size()) {
    cout << "invalid argumentsn";
    return;
  }
  reverse(v.begin() + i - 1, v.begin() + j);
}
 

int main()
{
  std::vector<int> vect{3, 2, 6, 8, 5, 9, 1, 7, 4};
  std::cout << "Print vector before ...nt";
  print_vector(vect);
  std::cout << "Print vector after ...nt";
  FLIP(vect.size(), vect,1,6);
  print_vector(vect);
  return 0;
}

输出:

Print vector before ...
    3 2 6 8 5 9 1 7 4 
Print vector after ...
    3 9 5 8 6 2 1 7 4 
Process finished with exit code 0

最新更新