Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> std::count (algorithm) 
V
    Опции темы
oshilan
Дата 20.10.2011, 19:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 77
Регистрация: 21.3.2010

Репутация: нет
Всего: 0



Нужно подсчитать, сколько элементов в векторе с помощью функции std::count. У меня выбивало ошибку ниже, но я переопределил тот ошибочный оператор, но программа всё равно неправильно работает (кол-во = 0). Помогите, пожалуйста, переопределить оператор ==, чтоб всё работало.

Ошибка:
Код
error C2676: бинарный '==': 'A' не определяет этот оператор или преобразование к типу приемлемо к встроенному оператору


Программа:
Код
#include<vector>
#include<algorithm>
#include<iostream>
using namespace std;

class A
{
public:
    A(int x);
    int x;
    //Внизу как бы переопределение, но я не знаю, как его правильно сделать
    bool operator==(const A& a) const
    {
        return x<a.x;
    }
};

A::A(int ax)
{ 
    x=ax;
}

void main()
{
    vector<A> vc;
    int x;
    vc.push_back( A(1) );
    vc.push_back( A(2) );
    vc.push_back( A(3) );
    vc.push_back( A(4) );
    x=count(vc.begin(), vc.end(), 0); //без понятия, что передавать третим параметром в моём случае
    cout<<x;
}

PM MAIL   Вверх
newbee
Дата 20.10.2011, 19:13 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бревно
**


Профиль
Группа: Участник
Сообщений: 703
Регистрация: 24.8.2011

Репутация: 4
Всего: 19



Каунт считает количество попаданий элемента в последовательность. Третий аргумент - это и есть тот элемент. У тебя правильно выдает ноль, потому что все элементы вектора больше этого элемента, т.к. твой оператор== для всех них возвращает ложь.

Код
-return x<a.x;
+return x==a.x;

-x=count(vc.begin(), vc.end(), 0);
+x=count(vc.begin(), vc.end(), 2);


Добавлено через 2 минуты и 22 секунды
Если что, ощий размер вектора можно узнать через std::vector::size().


--------------------
You're face to face
With man who sold the world
PM   Вверх
oshilan
Дата 20.10.2011, 19:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 77
Регистрация: 21.3.2010

Репутация: нет
Всего: 0



newbee, спасибо конечно, но у меня что-то вообще странное smile Я сделал так (ниже) и всё работает. Но это тестовая программа. Когда я делаю точно так в своём реальном проекте, то выбивает ошибку: error C2678: бинарный '==': не найден оператор, принимающий левый операнд типа 'CWindow' (или приемлемое преобразование отсутствует) Ну это вообще капец... Проект большой и смысла его вылаживать нет. F*ck!
Код
#include<vector>
#include<algorithm>
#include<iostream>
using namespace std;

class A
{
public:
    A(int x);
    int x;
    bool operator==(const A& a) const
    {
        return true;
    }
};

A::A(int ax)
{ 
    x=ax;
}

void main()
{
    vector<A> vc;
    int x;
    vc.push_back( A(1) );
    vc.push_back( A(2) );
    vc.push_back( A(3) );
    vc.push_back( A(4) );
    x=count(vc.begin(), vc.end(), 0);
    cout<<x;
}

PM MAIL   Вверх
newbee
Дата 20.10.2011, 19:29 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бревно
**


Профиль
Группа: Участник
Сообщений: 703
Регистрация: 24.8.2011

Репутация: 4
Всего: 19



Ты хочешь узнать, сколько одинаковых окон находится у тебя в векторе? Ладно, давай мы не будем угадывать, а ты сам все расскажешь))


--------------------
You're face to face
With man who sold the world
PM   Вверх
oshilan
Дата 20.10.2011, 19:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 77
Регистрация: 21.3.2010

Репутация: нет
Всего: 0



newbee, сейчас выложу, куски smile

Добавлено через 7 минут и 14 секунд
Ну, где-то так (все нужные хедеры и пространства прописаны):
Код

//Хедер
class CWindow
{
public:
    //... методы и поля
    bool operator<(const CWindow& aWin) const //это отсюда http://forum.vingrad.ru/forum/topic-340233.html )))
    {
        return iX*iY<aWin.iX*aWin.iY;
    }
    bool operator==(const CWindow& aWin) const; //вот эта ветка форума
    {
        return true; //пускаю всех, главное, чтоб ошибки небыло (собственно мне и нужно вссех пускать)
    }
}
//Мэйн
void main()
{
    //...
    vector<CWindow> algCntr;
    vector<CWindow>::iterator iterK;
    algCntr.push_back(CWindow(10,20,30,40,0,0,0));
    algCntr.push_back(CWindow(800,600,40,50,0,0,0));
    algCntr.push_back(CWindow(40,10,5,5,0,0,0));
    algCntr.push_back(CWindow(40,10,5,5,0,0,0));
    algCntr.push_back(CWindow(2,5,8,6,0,0,0));
    int x=count(algCntr.begin(), algCntr.end(), 0);

PM MAIL   Вверх
newbee
Дата 20.10.2011, 19:57 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бревно
**


Профиль
Группа: Участник
Сообщений: 703
Регистрация: 24.8.2011

Репутация: 4
Всего: 19



oshilan, а теперь скажи, что именно ты хочешь получить? Если просто количество элементов в векторе, используй algCntr.size().


--------------------
You're face to face
With man who sold the world
PM   Вверх
oshilan
Дата 20.10.2011, 20:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 77
Регистрация: 21.3.2010

Репутация: нет
Всего: 0



newbee, по заданию лабы я должен использовать алгоритм std::count для контейнера объектов класса.
PM MAIL   Вверх
newbee
Дата 20.10.2011, 20:07 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бревно
**


Профиль
Группа: Участник
Сообщений: 703
Регистрация: 24.8.2011

Репутация: 4
Всего: 19



std::count внутри вызывает поочередно operator== для сравнения своего третьего аргумента с каждым членом последовательности. Так, как используешь его ты, он будет пытаться сравнить CWindow (член вектора) с int (третий аргумент std::count), это недопустимо так же как недопустимо сравнивать ежа с ужом. Можешь сделать так и сосчитать число всех элементов последовательности:
Код

    bool operator==(int) const; //вот эта ветка форума
    {
        return true; //пускаю всех, главное, чтоб ошибки небыло (собственно мне и нужно вссех пускать)
    }

//или более общий случай:
    template<typename T>
    bool operator==(T const&) const; //вот эта ветка форума
    {
        return true; //пускаю всех, главное, чтоб ошибки небыло (собственно мне и нужно вссех пускать)
    }


Только, думаю, задание ты понял неправильно...

Это сообщение отредактировал(а) newbee - 20.10.2011, 20:08


--------------------
You're face to face
With man who sold the world
PM   Вверх
oshilan
Дата 20.10.2011, 20:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 77
Регистрация: 21.3.2010

Репутация: нет
Всего: 0



УУууУУУуууУУ, еее, молодец! newbee, ты молодец! Дешево и сердито, мне нравится smile Народ, старички, стукните ему кто нибудь плюсик за меня, благодаря ему я хоть нормально лягу спать )))

Добавлено через 2 минуты и 51 секунду
newbee, главное не сказал.. СПАСИБО! )))
PM MAIL   Вверх
newbee
Дата 20.10.2011, 20:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бревно
**


Профиль
Группа: Участник
Сообщений: 703
Регистрация: 24.8.2011

Репутация: 4
Всего: 19



oshilan, пожалуйста smile


--------------------
You're face to face
With man who sold the world
PM   Вверх
mes
Дата 20.10.2011, 20:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



Цитата(oshilan @  20.10.2011,  19:14 Найти цитируемый пост)
плюсик за меня, благодаря ему я хоть нормально лягу спать )))

сделано  smile

Цитата(oshilan @  20.10.2011,  19:14 Найти цитируемый пост)
плюсик за меня, благодаря ему я хоть нормально лягу спать )))

ей
smile



--------------------
PM MAIL WWW   Вверх
oshilan
Дата 20.10.2011, 20:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 77
Регистрация: 21.3.2010

Репутация: нет
Всего: 0



mes, будем считать, что я имел ввиду "пользователь", всмысле, ОН... А так, разумеется ОНА  smile  smile 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1055 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.