打印矢量数组中的所有元素

Printing all elements in array of Vector

本文关键字:元素 数组 打印      更新时间:2023-10-16
int n=1000000;
vector <int> divisors[1000001];
void solve()
{

for(int i=1; i<=n; i++)

for(int j=i; j<=n; j+=i)

divisors[j].push_back(i);
}

现在,我想打印除数的所有元素。我该怎么做?

您需要两个循环来首先遍历向量数组,然后遍历每个向量。多年来,C++已经改进了很多,所以现在有简单的方法可以做到这一点:

#include <vector>
#include <iostream>
constexpr int n=1000000;
std::vector<int> divisors[n+1];
void solve()
{
for(int i=1; i<=n; i++)
for(int j=i; j<=n; j+=i)
divisors[j].push_back(i);
}
int main()
{
solve();
for (auto &i : divisors)
for (auto j : i)
std::cout << "array index:" << &i - &divisors[0] << "  Entry " << j << std::endl;
}

顺便说一句,这是非常慢的,因为向量被扩展会产生大量的堆抖动。加快速度的一种方法是制作第二个整数数组,并使用相同的循环结构增加每个元素中的值。然后遍历数组中的所有向量并将它们调整为所需的大小。我将把这个作为OP的练习。

你需要像这样遍历向量的大小,

for(int i = 0; i < vector_name.size(); i++){
cout << vector_name.at(i) << " ";
}

它也可以工作

vector<int>::iterator it;
for (int i=1; i<=1000000; i++)
{ 
for(it=divisors[i].begin();it!=divisors[i].end(); it++)cout<<*it<<" "; cout<<endl;}