@@ -269,11 +269,11 @@ void Triangulation::calculate_boundaries()
269269        auto  it = boundary_edges.cbegin ();
270270        int  tri = it->tri ;
271271        int  edge = it->edge ;
272-         _boundaries.push_back ( Boundary () );
272+         _boundaries.emplace_back ( );
273273        Boundary& boundary = _boundaries.back ();
274274
275275        while  (true ) {
276-             boundary.push_back ( TriEdge ( tri, edge) );
276+             boundary.emplace_back ( tri, edge);
277277            boundary_edges.erase (it);
278278            _tri_edge_to_boundary_map[TriEdge (tri, edge)] =
279279                BoundaryEdge (_boundaries.size ()-1 , boundary.size ()-1 );
@@ -624,7 +624,7 @@ void TriContourGenerator::clear_visited_flags(bool include_boundaries)
624624            //  Initialise _boundaries_visited.
625625            _boundaries_visited.reserve (boundaries.size ());
626626            for  (const  auto  & boundary : boundaries) {
627-                 _boundaries_visited.push_back ( BoundaryVisited ( boundary.size () ));
627+                 _boundaries_visited.emplace_back ( boundary.size ());
628628            }
629629
630630            //  Initialise _boundaries_used.
@@ -796,8 +796,7 @@ void TriContourGenerator::find_boundary_lines(Contour& contour,
796796            if  (startAbove && !endAbove) {
797797                //  This boundary edge is the start point for a contour line,
798798                //  so follow the line.
799-                 contour.push_back (ContourLine ());
800-                 ContourLine& contour_line = contour.back ();
799+                 ContourLine& contour_line = contour.emplace_back ();
801800                TriEdge tri_edge = *itb;
802801                follow_interior (contour_line, tri_edge, true , level, false );
803802            }
@@ -830,8 +829,7 @@ void TriContourGenerator::find_boundary_lines_filled(Contour& contour,
830829
831830                if  (decr_lower || incr_upper) {
832831                    //  Start point for contour line, so follow it.
833-                     contour.push_back (ContourLine ());
834-                     ContourLine& contour_line = contour.back ();
832+                     ContourLine& contour_line = contour.emplace_back ();
835833                    TriEdge start_tri_edge = boundary[j];
836834                    TriEdge tri_edge = start_tri_edge;
837835
@@ -859,8 +857,7 @@ void TriContourGenerator::find_boundary_lines_filled(Contour& contour,
859857            const  Boundary& boundary = boundaries[i];
860858            double  z = get_z (triang.get_triangle_point (boundary[0 ]));
861859            if  (z >= lower_level && z < upper_level) {
862-                 contour.push_back (ContourLine ());
863-                 ContourLine& contour_line = contour.back ();
860+                 ContourLine& contour_line = contour.emplace_back ();
864861                for  (auto  edge : boundary) {
865862                    contour_line.push_back (triang.get_point_coords (
866863                                      triang.get_triangle_point (edge)));
@@ -895,8 +892,7 @@ void TriContourGenerator::find_interior_lines(Contour& contour,
895892            continue ;  //  Contour does not pass through this triangle.
896893
897894        //  Found start of new contour line loop.
898-         contour.push_back (ContourLine ());
899-         ContourLine& contour_line = contour.back ();
895+         ContourLine& contour_line = contour.emplace_back ();
900896        TriEdge tri_edge = triang.get_neighbor_edge (tri, edge);
901897        follow_interior (contour_line, tri_edge, false , level, on_upper);
902898
@@ -1435,10 +1431,10 @@ TrapezoidMapTriFinder::initialize()
14351431
14361432    //  Set up edges array.
14371433    //  First the bottom and top edges of the enclosing rectangle.
1438-     _edges.push_back ( Edge (&_points[npoints],   &_points[npoints+1 ], -1 , -1 ,
1439-                            nullptr , nullptr ) );
1440-     _edges.push_back ( Edge (&_points[npoints+2 ], &_points[npoints+3 ], -1 , -1 ,
1441-                            nullptr , nullptr ) );
1434+     _edges.emplace_back (&_points[npoints],   &_points[npoints+1 ], -1 , -1 ,
1435+                         nullptr , nullptr );
1436+     _edges.emplace_back (&_points[npoints+2 ], &_points[npoints+3 ], -1 , -1 ,
1437+                         nullptr , nullptr );
14421438
14431439    //  Add all edges in the triangulation that point to the right.  Do not
14441440    //  explicitly include edges that point to the left as the neighboring
@@ -1457,11 +1453,12 @@ TrapezoidMapTriFinder::initialize()
14571453                    const  Point* neighbor_point_below = (neighbor.tri  == -1 ) ?
14581454                        nullptr  : _points + triang.get_triangle_point (
14591455                                          neighbor.tri , (neighbor.edge +2 )%3 );
1460-                     _edges.push_back (Edge (start, end, neighbor.tri , tri,
1461-                                           neighbor_point_below, other));
1456+                     _edges.emplace_back (start, end, neighbor.tri , tri,
1457+                                         neighbor_point_below, other);
1458+                 }
1459+                 else  if  (neighbor.tri  == -1 ) {
1460+                     _edges.emplace_back (end, start, tri, -1 , other, nullptr );
14621461                }
1463-                 else  if  (neighbor.tri  == -1 )
1464-                     _edges.push_back (Edge (end, start, tri, -1 , other, nullptr ));
14651462
14661463                //  Set triangle associated with start point if not already set.
14671464                if  (start->tri  == -1 )
0 commit comments