AlexSetup
@AlexSetup
Python

Как печатать указатели в C++?

Возможно вопрос поставлен неправильно, но все же.
Есть задачи найти индекс первого и последнего вхождения числа x в последовательность.
Я решил использовать lower_bound(x) и upper_bound(x)
Но как известно они возвращают указатели.
Вопрос: А как мне напечатать указатель?
Мой код (не рабочий) :
#include <iostream>
#include <cmath>
#include <vector>
#include <algorithm>
#include <set>

using namespace std;

int main() {
	int n, m;
	cin >> n >> m;
	multiset <int> A;
	for (int i = 0; i < n; i++) {
		int x;
		cin >> x;
		A.insert(x);
	}
	for (int q = 0; q < m; q++) {
		int x;
		cin >> x;
		cout << A.lower_bound(x) << endl;
		cout << A.upper_bound(x) << endl;
	}
	return 0;
}


Пока что новичок в C++.
Заранее спасибо!
  • Вопрос задан
  • 373 просмотра
Решения вопроса 1
terrier
@terrier
Но как известно они возвращают указатели.

Как известно, они возвращают итераторы.

Есть задачи найти индекс первого и последнего вхождения числа x в последовательность.
Я решил использовать lower_bound(x) и upper_bound(x)

Однако, lower_bound и upper_bound возвращают итераторы на первое значение, которое больше или равно ( или соответственно, меньше или равно ) заданному. Для того, чтобы найти конкретно заданное значение нужно использовать, как это ни удивительно find.
Кроме того, вы же понимаете, что multiset пересортировывает входящую последовательность и она уже будет не такой, как вводит пользователь?

Если вам нужен индекс, то нужно из итератора, полученного из функции поиска вычесть итератор на начало последовательности. Кроме того не забудьте обработать случай, когда числа в последовательности вовсе нет. Первое вхождение ищется очевидным образом, как найти последнее, пожалуй оставим на самостоятельное изучение.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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