как я использую алгоритмы STL с вектором указателей

Вы можете использовать tap, чтобы проверить, достигло ли значение вашей цели и выполнить побочные эффекты.
Нечто подобное

function setCountDown() {
    let counter = 5;
    let tick = 1000;
    this.countDown = timer(0, tick)
      .pipe(
        take(counter + 1),
        map(value => counter - value),
        tap(value => {
          if (value === 0) {
            console.log('OUT OF TIME');
          }
        }),
        takeUntil(userClick)
      )
}

См. Этот пример

12
задан Neil G 19 May 2009 в 05:14
поделиться

3 ответа

Вы можете использовать Повышающий косвенный итератор . При разыменовании (с помощью оператора * () ) он применяет дополнительную разыменование , поэтому вы получите значение, указанное указателем, на который ссылается итератор. Для получения дополнительной информации вы также можете увидеть этот вопрос об итераторе разыменования .

Вот простой пример:

std::vector<int*> vec;

vec.push_back(new int(1));
vec.push_back(new int(2));

std::copy(boost::make_indirect_iterator(vec.begin()),
          boost::make_indirect_iterator(vec.end()),
          std::ostream_iterator<int>(std::cout, " "));     // Prints 1 2
19
ответ дан 2 December 2019 в 07:04
поделиться
bool consistent = count_if(myValues.begin(), myValues.end(), 
   bind2nd(ptr_fun(compare_ptr), *myValues.front())) == myValues.size();

int v = consistent ? *myValues.front() : accumulate(
   myValues.begin(), myValues.end(), 0, sum_int_ptr) / myValues.size();

for_each(myValues.begin(), myValues.end(), bind1st(ptr_fun(assign_ptr),v));

Заполнение не может принимать функцию присваивания (так, чтобы она разыменовывала указатели). Поэтому for_each () был использован. Для оптимизации было бы целесообразно добавить if (! Compatibility) перед запуском for_each (). Функции, используемые в приведенных выше строках STL one:

int sum_int_ptr(int total, int * a) { return total + *a; }    
void assign_ptr(int v, int *ptr) { *ptr = v; }    
bool compare_ptr(int* a, int pattern) { return *a == pattern; }
3
ответ дан 2 December 2019 в 07:04
поделиться

Вы можете посмотреть boost :: shared_ptr <> - умный указатель с подсчетом ссылок. Он не удалит указатель после выхода из области видимости.

0
ответ дан 2 December 2019 в 07:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: