for(auto x : arr) 遍历方式, x只是将arr里的元素复制下来,改变x不会改变arr的元素
for(auto &x : arr) x是将arr元素的地址拿出来,改变x会改变arr的元素
C++ 代码
#include <iostream>
#include <algorithm>
#include <cstring>
#include <cstdio>
#include <vector>
using namespace std;
vector<int> slove(int n)
{
vector<int> a;
//合数的约数是成对出现的,i是n的约数,n/i也是x的约数
for(int i = 1; i <= n /i; i++)
{
if(n % i == 0)
{
a.push_back(i);
//当i!=n/i时就把n/i加进去
if(i != n / i)
a.push_back(n / i);
}
}
sort(a.begin(), a.end());
return a;
}
int main()
{
int n, num;
cin >> n;
while(n--)
{
cin >> num;
auto t = slove(num);
//for(auto x : arr) 遍历方式, x只是将arr里的元素复制下来,改变x不会改变arr的元素
//for(auto &x : arr) x是将arr元素的地址拿出来,改变x会改变arr的元素
for(auto x : t)
cout << x <<" ";
cout << endl;
}
return 0;
}
%%%%%