C++ 使用成对数组是否比使用向量对更有效?

C++ 使用成对数组是否比使用向量对更有效?,c++,algorithm,time-complexity,stdvector,std-pair,C++,Algorithm,Time Complexity,Stdvector,Std Pair,当我使用一对向量作为: 向量v; 对于(int i=0;i如果您知道编译时的对计数,并且该计数是常量,请使用std::array。否则,您可以在这些行中使用std::vector或其他STL容器。 vector<pair<int,int>> v; for(int i=0;i<n;++i) v.push_back(make_pair(a,b)) 作为旁注,请不要在第一个示例中声明v后尝试添加v.reserve(n)?这样可以避免重新分配开销,使向量大致相当

当我使用一对向量作为:

向量v;
对于(int i=0;i如果您知道编译时的对计数,并且该计数是常量,请使用std::array。否则,您可以在这些行中使用std::vector或其他STL容器。

vector<pair<int,int>> v;

for(int i=0;i<n;++i)
   v.push_back(make_pair(a,b))


作为旁注,请不要

在第一个示例中声明
v
后尝试添加
v.reserve(n)
?这样可以避免重新分配开销,使
向量
大致相当于原始数组(如果您可以切换到
emplace\u back
,则更为等效。尽管如此,不清楚为什么您不直接使用
n
单个对的副本进行初始化来填充内容,因为这些值都是相同的。在第二个示例中,对数组的大小在编译时已知,并且将放在与第一个使用动态容器的示例相比,它是(忽略任何小向量优化)在堆上分配和重新分配。您可以尝试第一个示例,但调用reserve在动态分配的向量中预先保留适当的大小,以至少避免重新分配。这里的答案是正确的,但很难想象,当相同大小的数组适配时,任何向量效率低下都会导致TLE在堆栈上。它太小了,不可能是一个真正的问题。代码中的其他地方可能存在更严重的问题。可能是缓冲区溢出,在移动数组时会产生不同的影响。
pair<int,int> v[n];
for(int i=0;i<n;++i)
{
       v[i].first=a;
       v[i].second=b;
}
sort(v,v+n);
vector<pair<int,int>> v;

for(int i=0;i<n;++i)
   v.push_back(make_pair(a,b))
#include <vector>
#include <utility>  // std::pair

std::vector<std::pair<int, int>> v;

const int n = 5; // lets say n = 5

v.reserve(n);   // now, reserve the memory for `n` pairs

for (int i = 0; i < n; ++i)
   // you can use `std::vector::emplace_back` to insert the pairs in place like this!
   v.emplace_back(a, b);