Помогите с std :: find - PullRequest
0 голосов
/ 12 июня 2009

Чем именно я должен заменить ??? , чтобы получить итератор ( it ) для некоторого элемента (например, Base(2))?

Я попробовал несколько снимков, но ничего, компилятор просто говорит, что это неправильно.

Вот код

#include <cstdlib>
#include <iostream>
#include <vector>
using namespace std;

class Base
{
    public:
    Base(int a) {ina = a;}
    ~Base()  {}
    int Display() {return ina;} 

    int ina;
};

int main(int argc, char *argv[]) 
{
    vector<Base> myvector;

    for(int i=0 ; i<10 ; i++)
    {
     myvector.push_back(Base(i));
    }

    vector<Base>::iterator it;

    it = find(myvector.begin(), myvector.end(), ??? );

    system("PAUSE");
    return EXIT_SUCCESS;
}

Заранее спасибо!

Ответы [ 3 ]

5 голосов
/ 12 июня 2009

Третий параметр - это просто значение, которое вы ищете.

it = find(myvector.begin(), myvector.end(), Base(2));

Проблема теперь в том, что компилятору нужно знать, равны ли два элемента. Поэтому вам нужно будет реализовать оператор для проверки на равенство (напишите этот код между main и определением вашего класса):

// a equals b if a.ina equals b.ina
bool operator == (const Base& a, const Base& b) {
    return a.ina == b.ina;
}

Если вы просто хотите получить n-й элемент myvector, вы также можете просто написать myvector.begin() + n.

2 голосов
/ 12 июня 2009

Вы можете просто выполнить myvector.begin () + n, чтобы получить итератор для n-го элемента myvector.

0 голосов
/ 12 июня 2009

http://www.cplusplus.com/reference/algorithm/find/

Третий аргумент - это значение, с которым вы «сравниваете».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...