Почему вычитание набора C ++ не может быть проще? - PullRequest
0 голосов
/ 05 апреля 2020

Я полностью осознаю, что set_difference может вычесть два набора, и я знаю, что операторы являются синтаксическими c сахарами. Но мне интересно, почему разработчики стандартной библиотеки не предоставляют такую ​​функциональность, поэтому вычитание становится таким простым?

#include <iostream>
#include <algorithm>
#include <set>

int main ()
{
  std::set<int> s1{5,10,15,20,25};
  std::set<int> s2{50,40,30,20,10};

  for (int x: s1 - s2)
    std::cout << ' ' << x;
  std::cout << '\n';

  return 0;
}

вместо использования этого усложнения:

std::set_difference (s1.begin(), s1.end(), s2.begin(), s2.end(), v.begin());

Есть ли реализация препятствия?

1 Ответ

0 голосов
/ 05 апреля 2020

Алгоритм set_difference работает с последовательностями. Я не могу вспомнить ни одного алгоритма в STL, который конкретно работает с контейнером.

STL прилагает большие усилия для отделения алгоритмов (которые работают с последовательностями) от контейнеров, которые хранят данные и обеспечивают связанные с хранением операции над этими данными.

Вы путаете эти два, потому что имя алгоритма начинается с 'set'.

...