Как передать числа в вектор как параметр функции C ++ - PullRequest
0 голосов
/ 03 мая 2019

Функция FLIP принимает 4 параметра. n, число элементов вектора, v вектор, i и j, случайные числа. Функция будет выглядеть так: FLIP (n, v, i, j). Что он делает, так это то, что он берет все элементы вектора от i до j и обращает их вспять. Например, FLIP (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;
}

Ответы [ 2 ]

2 голосов
/ 03 мая 2019

синтаксис будет

{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 << " ";
    }
}
0 голосов
/ 06 мая 2019

Проблема несколько запутанная из-за противоречивых определений вашего вектора. В main() v определяется как массив символов: v[50]. Однако во FLIP он определяется как вектор.

Поскольку лучший способ сделать это с помощью 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 arguments\n";
    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 ...\n\t";
  print_vector(vect);
  std::cout << "Print vector after ...\n\t";

  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
...