打印 Vector 数组中的所有元素

Printing all elements in array of Vector

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);

}

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

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

for(int i = 0; i < vector_name.size(); i++){
    cout << vector_name.at(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 的练习。

它也有效

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;}