Причина, по которой ipc+1
не работает, заключается в том, что std::set
поддерживает только двунаправленные итераторы, которые поддерживают operator++
и operator--
; чтобы использовать operator+
, вам нужно использовать итераторы произвольного доступа.
Одна проблема, которую я вижу в вашем дизайне, заключается в том, что ваши функции названы как средства доступа (getSuchAndSuch), но они также изменяют внутреннее состояние объекта (ipc
изменяется). Это может привести к путанице.
Одна вещь, которую вы могли бы попробовать, это использовать несколько функций-членов, которые возвращают итераторы (например, begin
и end
) и позволяют пользователям вашего класса использовать итераторы для доступа к внутреннему набору, в то время все еще инкапсулирует реализацию набора.
Вы можете вернуть тип итератора набора или, если вы хотите больше контроля или инкапсуляции, вы можете реализовать свой собственный класс итератора, который обертывает итератор набора.