配对初始化的向量
vector of pair initialization
有人可以帮助我了解该代码的工作方式吗?
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);
使用此构造函数。a
和a + 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;
}
它的输出与上面显示的相同。
相关文章:
- 为什么我在向量初始化时收到此错误?
- 使用向量初始化参数化构造函数的对象数组
- C++向量初始化遗传算法的代理向量
- shared_ptr类的向量的向量初始化问题
- 如何实现使用 gcc-4.4 编译的大向量初始化?
- 使用向量初始化C++中的链表
- C++ 中的向量初始化
- 如何使用嵌套初始化构造函数中的一维向量初始化矩阵
- std::另一个函数中的向量初始化
- 理解向量初始化时出现问题
- 静态常量 std::<char>没有堆的向量初始化?
- 向量初始化在 C++ 类中失败
- 具有从特定范围的随机数初始化特征矩阵或向量初始化特征矩阵或向量的有效方法
- 关于向量初始化的一些问题
- 了解C 中的向量初始化
- 设置::使用数字中的引号进行向量初始化
- VS2010中的向量初始化
- C++:构造函数中的向量初始化
- 如何从向量初始化数组?(如何将指针强制转换为数组?)
- 给我一个向量初始化的提示或(答案)