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