功能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;
}
答案 0 :(得分:2)
语法应为
{3, 2, 6, 8, 5, 9, 1, 7, 4}
不是
[3 2 6 8 5 9 1 7 4]
但是,此外,您不能将临时绑定到非const引用。
您可以将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 << " ";
}
}
答案 1 :(得分:0)
由于向量的定义相互矛盾,问题有些令人困惑。在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