Блог пользователя Babushkin

Автор Babushkin, 15 лет назад, По-русски
Помогите пожалуйста разобраться.
Следующий код выполняется с ошибкой "map/set iterator not incrementable" (под VS)

#include <algorithm>
#include <set>

using namespace std;

int main(){
     set<int> A, B, C;
     A.insert(1);A.insert(2);A.insert(3);
     B.insert(1);B.insert(2);B.insert(4);
     set_union(A.begin(), A.end(), B.begin(), B.end(), C.begin());
     return 0;
}

что я делаю не правильно?
  • Проголосовать: нравится
  • 0
  • Проголосовать: не нравится

15 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится
Судя по-всему, значением output_destination_iterator (последний арумент set_union) должен быть итератор последовательного контейнера (к примеру, вектора), указывающий на начало области памяти, куда будет записан результат. Проще всего на begin(). Кроме того, этот вектор должен иметь размер, достаточный для записи результата. А вернет set_union итератор, указывающий на позицию за последним элементом выходного интервала. Я бы написал так:

 set<int> A, B;
     A.insert(1);A.insert(2);A.insert(3);
     B.insert(1);B.insert(2);B.insert(4);
     vector<int> C(A.size() + B.size());
     C.erase(set_union(A.begin(), A.end(), B.begin(), B.end(), C.begin()), C.end());

Т.е. после вызова из C удалятся ненужные элементы.
15 лет назад, # |
  Проголосовать: нравится +12 Проголосовать: не нравится

set_union(A.begin(), A.end(), B.begin(), B.end(), inserter(C,C.begin()));

учим C++ ;)

  • 15 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится
    Макс, поясни тогда то, что написал. У меня это вообще не скомпилировалось. Что-то подключить видимо надо?