配对初始化的向量

vector of pair initialization

本文关键字:向量 初始化      更新时间:2023-10-16

有人可以帮助我了解该代码的工作方式吗?

Pair a[] = {{5, 29}, {39, 40}, {15, 28}, {27, 40}, {50, 90}};
int n = sizeof(a)/sizeof(a[0]);
vector<Pair> arr(a, a + n);

(对是一个具有两个整数A和B)

的结构

我能告诉的,它将每对放在一个单独的数组中,但是我以前从未见过这种声明。

类模板std::vector具有构造函数

template <class InputIterator>
vector(InputIterator first, InputIterator last, const Allocator& = Allocator());

因此在此声明中

vector<Pair> arr(a, a + n); 

使用此构造函数。aa + n指定范围[a, a + n )。此范围内的元素用于初始化向量。

至于此声明

Pair a[] = {{5, 29}, {39, 40}, {15, 28}, {27, 40}, {50, 90}};

然后,它是通过使用BRACE列表初始化的数组的声明数组的声明。看来用户定义的类型Pair是聚合或具有接受两个参数的构造函数。

这是一个指示的程序

#include <iostream>
#include <vector>
struct Pair
{
    int x;
    int y;
};
int main() 
{
    Pair a[] = 
    { 
        {5, 29}, {39, 40}, {15, 28}, {27, 40}, {50, 90} 
    };
    size_t n = sizeof( a ) / sizeof( a[0] );
    std::vector<Pair> arr(a, a + n);
    for ( const Pair &p : arr )
    {
        std::cout << "{ " << p.x 
                  << ", " << p.y
                  << " }" << ' ';
    }
    std::cout << std::endl;
    return 0;
}

其输出是

{ 5, 29 } { 39, 40 } { 15, 28 } { 27, 40 } { 50, 90 }

而不是这些语句

    size_t n = sizeof( a ) / sizeof( a[0] );
    std::vector<Pair> arr(a, a + n);

您可以写

std::vector<Pair> arr( std::begin( a ), std::end( a ) );

这是另一个指示程序

#include <iostream>
#include <vector>
#include <iterator>
struct Pair
{
    int x;
    int y;
};
int main() 
{
    Pair a[] = 
    { 
        {5, 29}, {39, 40}, {15, 28}, {27, 40}, {50, 90} 
    };
    std::vector<Pair> arr( std::begin( a ), std::end( a ) );
    for ( const Pair &p : arr )
    {
        std::cout << "{ " << p.x 
                  << ", " << p.y
                  << " }" << ' ';
    }
    std::cout << std::endl;
    return 0;
}

它的输出与上面显示的相同。