我在下面遇到这个问题。我正在尝试完成一个程序,该程序从用户读取多个输入以形成数组,然后以相反的顺序输出数组。
输入的第一行n应该是数组中的整数数。下一个输入应该是数组中每个索引的值。
我第一次使用C ++中的数组工作并发现这令人困惑,我搜索并发现有一种方法可以在一行中完成此操作,但我想在没有它的情况下完成此操作。我在当前循环中尝试了if语句和for循环,但每次我最终会使它复杂化并且无处可去。我确信我有一个简单的方法。
示例输入 -
4
1 2 3 4
输出应为 -
4 3 2 1
#include <map>
#include <set>
#include <list>
#include <cmath>
#include <ctime>
#include <deque>
#include <queue>
#include <stack>
#include <string>
#include <bitset>
#include <cstdio>
#include <limits>
#include <vector>
#include <climits>
#include <cstring>
#include <cstdlib>
#include <fstream>
#include <numeric>
#include <sstream>
#include <iostream>
#include <algorithm>
#include <unordered_map>
using namespace std;
int main(){
int n;
cin >> n;
vector<int> arr(n);
for(int arr_i = 0;arr_i < n;arr_i++){
int* arr = new int[n];
cin >> arr[arr_i];
}
return 0;
}
答案 0 :(得分:0)
您可以使用std::reverse()
中的<algorithm>
功能,如本文档中所述:http://www.cplusplus.com/reference/algorithm/reverse/
std::reverse(arr.begin(), arr.end());
如果您不需要反转矢量,只需按相反顺序打印,也可以向后迭代它:
for (std::vector<int>::const_reverse_iterator it = arr.rbegin(); it != arr.rend(); ++it)
std::cout << *it << " ";
警告:请注意您的行int* arr = new int[n];
,它似乎是内存泄漏。这隐藏了数组arr
的真实符号,然后您的本地变量arr
就会丢失。你应该删除这一行。
答案 1 :(得分:0)
我认为这是您可以对当前代码进行的最小编辑,以使其正常工作。请注意,您不需要在for循环体中分配新的arr
,因为您已经有一个具有该名称的向量。
int main(){
int n;
cin >> n;
vector<int> arr(n);
for(int arr_i = 0; arr_i < n; arr_i++){
cin >> arr[n-arr_i-1];
}
return 0;
}