lower_bound и iterator

156
26 апреля 2019, 11:30
#include <iostream>
#include <algorithm>
#include <vector>
#include <iterator> 
using namespace std;
int main(){
    vector <int> array;
    int dp=0;
    int n,d;
    vector<int>::const_iterator j;
    cin >> n >> d;
    for (int i = 0; i < n; ++i)
    {
        array.push_back(0);
        cin >> array[i];
    }
    sort(array.begin(),array.begin()+n);
    for (int i = 0; i < n-1; ++i)
    {
        for ( j=lower_bound(array.begin()+i, array.end, array[i]+d); j < n-1; ++j)
        {
            if (*j-1!=0)
            {
                if (array[*j]!=array[*j-1])
            {
                break;
            }
            }
            dp+=1;
        }
    }
    cout << dp;
    return 0;
}

не знаю как заставить это работать. перепробовал уже все варианты (auto, iterator, const_iterator). все ломается именно на строке с lower_bound.

no matching function for call to 'lower_bound(__gnu_cxx::__normal_iterator >, , __gnu_cxx::__alloc_traits >::value_type)'

Answer 1

Чтобы поправить ошибки компиляции можно паписать

for
(
    j = lower_bound(array.begin() + i, array.end(), array[i] + d);
    j < (array.begin() + n - 1);
    ++j
)

еще тут явно нужны проверки на выход за пределы массива при индексировани, например перед array[*j]

READ ALSO
Поиск библиотеки для распаковки данных

Поиск библиотеки для распаковки данных

Есть задача распаковать данные, запакованные с помощью zlib и это делается всего одной функцией из этой библиотекиНо если у меня из всей библиотеки...

158
Вывод графика функции WinApi

Вывод графика функции WinApi

Есть цикл рисующий график функции f(x) = x * x * x - 10 * x*x - 3 * x + 59 с помощью LineToНо при отображении получаются ломанные линии,как это можно исправить?

198
Векторы в gtkmm 3.0 [закрыт]

Векторы в gtkmm 3.0 [закрыт]

Файлы такие:

201