@@ -67,15 +67,10 @@ struct directed_adjacency_list {
6767 const impl_type& self, const types::id_type vertex_id
6868 ) {
6969 types::size_type in_deg = constants::default_size;
70- for (types::id_type id = constants::initial_id; id < self._list .size (); ++id) {
71- const auto & adj_edges = self._list [id];
72- if (adj_edges.empty ())
73- continue ;
74-
75- in_deg += std::ranges::count (adj_edges, vertex_id, [](const auto & edge) {
70+ for (const auto & adjacent_edges : self._list )
71+ in_deg += std::ranges::count (adjacent_edges, vertex_id, [](const auto & edge) {
7672 return edge->second_id ();
7773 });
78- }
7974
8075 return in_deg;
8176 }
@@ -107,10 +102,9 @@ struct directed_adjacency_list {
107102 [[nodiscard]] gl_attr_force_inline static std::vector<types::size_type> out_degree_map (
108103 const impl_type& self
109104 ) {
110- const auto out_degree_view =
111- self._list
112- | std::views::transform ([](const auto & adj_edges) { return adj_edges.size (); });
113- return std::vector<types::size_type>(out_degree_view.begin (), out_degree_view.end ());
105+ return self._list
106+ | std::views::transform ([](const auto & adj_edges) { return adj_edges.size (); })
107+ | std::ranges::to<std::vector<types::size_type>>();
114108 }
115109
116110 [[nodiscard]] static std::vector<types::size_type> degree_map (const impl_type& self) {
@@ -151,9 +145,9 @@ struct directed_adjacency_list {
151145
152146 static const edge_type& add_edge (impl_type& self, edge_ptr_type edge) {
153147 auto & adjacent_edges_first = self._list [edge->first_id ()];
154- adjacent_edges_first.push_back (std::move (edge));
148+ auto & new_edge = adjacent_edges_first.emplace_back (std::move (edge));
155149 ++self._n_unique_edges ;
156- return *adjacent_edges_first. back () ;
150+ return *new_edge ;
157151 }
158152
159153 static void add_edges_from (
@@ -163,7 +157,7 @@ struct directed_adjacency_list {
163157 adjacent_edges_source.reserve (adjacent_edges_source.size () + new_edges.size ());
164158
165159 for (auto & edge : new_edges)
166- adjacent_edges_source.push_back (std::move (edge));
160+ adjacent_edges_source.emplace_back (std::move (edge));
167161
168162 self._n_unique_edges += new_edges.size ();
169163 }
@@ -282,7 +276,7 @@ struct undirected_adjacency_list {
282276
283277 if (not edge->is_loop ())
284278 self._list [edge->second_id ()].push_back (edge);
285- adjacent_edges_first.push_back (std::move (edge));
279+ adjacent_edges_first.emplace_back (std::move (edge));
286280
287281 ++self._n_unique_edges ;
288282 return *adjacent_edges_first.back ();
@@ -297,7 +291,7 @@ struct undirected_adjacency_list {
297291 for (auto & edge : new_edges) {
298292 if (not edge->is_loop ())
299293 self._list [edge->second_id ()].push_back (edge);
300- adjacent_edges_source.push_back (std::move (edge));
294+ adjacent_edges_source.emplace_back (std::move (edge));
301295 }
302296
303297 self._n_unique_edges += new_edges.size ();
0 commit comments