Тот факт, что вы получаете ошибку сегментации, заключается в том, что вы пытаетесь получить доступ к неинициализированной памяти.
Вы не можете напрямую сканировать на входе значение v[i]
, поскольку размер вектора v
изначально равен 0 .
Вместо этого используйте метод push_back()
или инициализируйте или измените размер вектора до размера n
.
Посмотрите на следующую реализацию:
#include <iostream>
#include <vector>
std::vector<int> reversearray(std::vector<int> a,int n)
{
int low=0, high=n-1;
while(low<high)
{
std::swap(a[low],a[high]);
low++;
high--;a
}
return a;
}
int main() {
int t,n;
std::vector<int> v,ans;
std::cin>>t;
while(t--)
{
std::cin>>n;
for(int i=0;i<n;i++){
int x;
std::cin>>x;
v.push_back(x);
}
ans=reversearray(v,n);
for(int i=0;i<n;i++)
std::cout<<ans[i]<<" ";
//Simple solution would be to iterate in reverse order
/*for(int i=n-1;i>=0;i--){
cout<<v[i]<<" ";
}*/
std::cout<<"\n";
v.clear();
}
return 0;
}
GFG Вердикт:
Если вы хотите использовать v[i]
:
#include <iostream>
#include <vector>
std::vector<int> reversearray(std::vector<int> a,int n)
{
int low=0, high=n-1;
while(low<high)
{
std::swap(a[low],a[high]);
low++;
high--;
}
return a;
}
int main() {
int t,n;
std::vector<int> v,ans;
std::cin>>t;
while(t--)
{
std::cin>>n;
v.resize(n);
for(int i=0;i<n;i++){
std::cin>>v[i];
}
ans=reversearray(v,n);
for(int i=0;i<n;i++)
std::cout<<ans[i]<<" ";
//Simple solution would be to iterate in reverse order
/*for(int i=n-1;i>=0;i--){
cout<<v[i]<<" ";
}*/
std::cout<<"\n";
}
return 0;
}
PS: Я бы посоветовал не использовать бит / stdc ++. H и с использованием пространства имен std . Вы можете узнать причину.