在C++中初始化一个点向量

3
Point P0(0,0), P1(3, 4), P2(-50,-3), P3(2,0); //Input  Points (fine)
std::vector<Point>  Points(P0,P1, P2 ,P3); (not fine)

这似乎不起作用。我该如何将点向量初始化为上述值?或者有更简单的方法吗?


你可能想查看 https://dev59.com/wHE95IYBdhLWcg3wm_It?rq=1 - Tony Delroy
3个回答

5

如果你正在使用c++11,你可以使用大括号来内联声明向量。

std::vector<Point> Points {P0, P1, P2, P3};

很遗憾,我没有C++11。 - Programmer
我明白了。data.push_back(Point(1,1)); - Programmer
1
那么你将不得不分别添加它们。除非你使用的是古老的编译器,否则你可能已经有了c++11。 - Red Alert
关于VS和C++ 11的有用链接 - Andrew Lazarus

4

尝试使用以下代码(未经测试):

Point P0(0,0), P1(3, 4), P2(-50,-3), P3(2,0); //Input  Points (fine)
std::vector<Point> Points;

Points.push_back(P0);
Points.push_back(P1);
Points.push_back(P2);
Points.push_back(P3);

3

不需要定义Point类型的对象来定义向量。你可以这样写:

std::vector<Point>  Points{ { 0, 0 }, { 3, 4 }, { -50,-3 }, { 2, 0 } };

只要你的编译器支持大括号初始化,就可以使用它来进行初始化。或者您可以定义一个 Point 数组并用它来初始化向量。例如:
#include <vector>
#include <iterator>
//,,,
Point a[] = { Point( 0, 0 ), Point( 3, 4 ), Point( -50,-3 ), Point( 2, 0 ) };
std::vector<Point>  Points( std::begin( a ), std::end( a ) ) ;

这段代码将被 MS VC++ 2010 编译。


1
花括号初始化列表、std::beginstd::end 都是 C++11 的特性,可能在旧编译器中不被完全支持。 - Edward
@Edward,我已经明确说明MS VC++ 2010支持我帖子中的最后一个示例。 - Vlad from Moscow
确实如此。我是通过命名规范来补充您的答案,这个规范向该语言添加了这些功能,以便使用不同编译器的其他人能够理解他们需要做什么才能利用您的答案。 - Edward

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接