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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> STL в C++, контейнер list<> 
:(
    Опции темы
INHazeR
Дата 10.12.2006, 22:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Первый раз постю на этом форуме, так что прошу прощения если нарушаю какие-то каноны данным тупым вопросом.
Дело в том, что я програмил на C# долгое время, а теперь по работе надо кое-что делать на C++, и надо разобраться с STL.
Вопроса на самом деле два.
1.
Необходимо объявить и использовать список объектов.
Код

#include <list>
#include "Candidate.h"

using namespace std;

typedef list<CCandidate, CCandidate> CNDLST;


class CDataSet  
{
public:
    int LoadData(char* fName);
    CNDLST CandMap;
    CDataSet();
    virtual ~CDataSet();

};


Класс CCandidate объявлен так:
Код

#include <string>

using namespace std;

class CCandidate  
{
public:
    string Name;
    string Region;
    string Party;
    int Votes;
    CCandidate();
    CCandidate(string iName, string iRegion, string iParty, int iVotes);
    virtual ~CCandidate();
    bool operator == (CCandidate &Cand);
    bool operator < (CCandidate &Cand);
    CCandidate* operator = (CCandidate &Cand);

};


При компиляции возникает около 33 ошибок и 136 предупрежденийsmile. На работе при попытке компиляции такого кода студия вообще упала. 

2. Что такое map? Только не говорите что это ассоциативный контейнер и т.д., это все в мсдн написаноsmile. Где он реально применяется? Зачем нужен? И как им пользоваться?

Заранее спасибо за ответы.
PM MAIL   Вверх
zabivator
Дата 10.12.2006, 22:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

Репутация: 1
Всего: 2



INHazeR, как минимум std::list<CCandidate>. Это во-первых.
Дальше - ассоциативный массив. если смотреть по использованию, это почти "массив", только вместо целых ( как у std::vector ) в качестве индексов может выступать любой тип, поддерживающий операторы ==, < а также поддерживающий оператор копирования (  ничего не напутал? =) ), т.е std::map<std::string,unsigned>, например,  это по сути говоря std::vector<std::string>, только наоборот.
Код

std::vector<std::string> v;
v.push_back("word");
v[0]="new work";
std::vector<std::string,unsigned> m;
m["word"]=0;
m["new_word"]=1;
m["new_word"]++;

--------------------
#include <zabivator>int main( int, char * [] ){   while( Zabivator::жив() ) Zabivator::моск()++;   return 0;}
PM MAIL WWW ICQ   Вверх
Xenon
Дата 10.12.2006, 22:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

Репутация: 11
Всего: 50



INHazeR, В таком массиве сам указываешь какого типа будет индекс.
А ошибки какие? 

Это сообщение отредактировал(а) Xenon - 10.12.2006, 22:27


--------------------
user posted image  
PM MAIL   Вверх
zabivator
Дата 10.12.2006, 22:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

Репутация: 1
Всего: 2



Xenon, typedef list<CCandidate, CCandidate> CNDLST; - это заставит компилятор поперхнуться туевой хучей ошибок, т.к. он ожидает вторым параметром аллакатор. Пока не поправлено это - про количество ошибок можно не говорить, да они и почти не читамые будут.. что-нить типа "не определен метод allocate у класса CCandidate"
--------------------
#include <zabivator>int main( int, char * [] ){   while( Zabivator::жив() ) Zabivator::моск()++;   return 0;}
PM MAIL WWW ICQ   Вверх
Xenon
Дата 10.12.2006, 22:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

Репутация: 11
Всего: 50



zabivator, не обратил внимания smile Ну да, даже непоставленная скобка вывзвает ошибок ...


--------------------
user posted image  
PM MAIL   Вверх
INHazeR
Дата 10.12.2006, 22:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



zabivator

Зачем std::list? У меня же написано using namespace std;
PM MAIL   Вверх
zabivator
Дата 10.12.2006, 22:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

Репутация: 1
Всего: 2



INHazeR, в твоем случае - да, но вообще говоря, это плохой стиль. По рукам за такое бить. Попробуй пособирай проект, в котором МЕГАБАЙТЫ исходников, а из stl используется один list. Время копиляции увеличивается на несколько минут
--------------------
#include <zabivator>int main( int, char * [] ){   while( Zabivator::жив() ) Zabivator::моск()++;   return 0;}
PM MAIL WWW ICQ   Вверх
INHazeR
Дата 10.12.2006, 22:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



ок, принял к сведениюsmile

исправил объявление на

Код

#include <list>
#include "Candidate.h"


typedef std::list<CCandidate, &CCandidate> CNDLST;


class CDataSet  
{
public:
    int LoadData(char* fName);
    CNDLST CandMap;
    CDataSet();
    virtual ~CDataSet();

};


Теперь уже только 3 ошибки:
error C2275: 'CCandidate' : illegal use of this type as an expression
error C2955: 'list' : use of class template requires template argument list
fatal error C1903: unable to recover from previous error(s); stopping compilation
PM MAIL   Вверх
zabivator
Дата 10.12.2006, 22:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

Репутация: 1
Всего: 2



INHazeR, typedef std::list<CCandidate, &CCandidate> CNDLST;  объясни мне, глупенькому, что ты хочешь этим сказать?
typedef std::list<CCandidate> CNDLST.  - так надо, имхо. Или я что-то Пэ smile  
--------------------
#include <zabivator>int main( int, char * [] ){   while( Zabivator::жив() ) Zabivator::моск()++;   return 0;}
PM MAIL WWW ICQ   Вверх
INHazeR
Дата 10.12.2006, 23:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



zabivator

спасибо, что вразумил дуракаsmile
тему можно закрывать
PM MAIL   Вверх
zabivator
Дата 10.12.2006, 23:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

Репутация: 1
Всего: 2



INHazeR, не дурак, просто новичок =))) Я и потупее ляпы делал когда начинал писать =)))
--------------------
#include <zabivator>int main( int, char * [] ){   while( Zabivator::жив() ) Zabivator::моск()++;   return 0;}
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
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.0485 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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