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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> поиск элемента одного дерева в другом. 
:(
    Опции темы
bsa
Дата 20.3.2008, 18:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

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



childs.resize в этом случае уже использовать нельзя.
Код
void Node::readFile( istream &stream)
{
    stream >>  ws;
    stream.ignore(8);
    stream >> Name;
    
    stream >>  ws;        stream.ignore(1); 
    stream >> pole1;    stream.ignore(2);
    stream >> pole2;    stream.ignore(2);
    stream >> level;    stream.ignore(2);
 //зачем size внесла в данные класса? size можно узнать вызвав childs.size() в любой момент
    stream >> size;    stream.ignore(2);

    Name.resize(Name.size()-1);
    id = ++root->lastId;
    while(size--) {
        childs.push_back( Node(root_) );
        childs.back().readFile(stream);
    }    
}
Данный алгоритм заработает, если ты перенесешь объявление size из класса в тело этого метода.

Это сообщение отредактировал(а) bsa - 20.3.2008, 18:53
PM   Вверх
baldina
Дата 20.3.2008, 19:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

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



кое-где было неаккуратно, и лишнее удалил, решился вопрос с конструктором по умолчанию: использовал другую форму resize()
посмотри:
Код

class Root;
class Node;

typedef std::vector<Node> Nodes;

class Node 
{
    long id;
    
public:
    Nodes childs;
    std::string Name;
    int pole1;
    int pole2;
    int level;
    int size;

private:
    Root * root;
    
public:

    /*Node()
    {
    }*/

    Node(Root *myRoot) : root(myRoot) {}

    /*void Copy (const Node &obj)
    {
        childs = obj.childs;
        Name   = obj.Name;
        pole1  = obj.pole1;
        pole2  = obj.pole2;
        level  = obj.level;
        size   = obj.size;
        id       = obj.id;
        root  =  obj.root;
    
    }
        
    Node (const Node &obj)
    {
        Copy(obj);
    }*/

    void LoadData(const std::string& str)
    {
        Name=str;
    }
    
    size_t GetNumChilds () const
    {
        return childs.size();
    }

    const Node & GetChild (size_t pos) const
    {
        return childs[pos];
    }

    Node & GetChild (size_t pos)
    {
        return childs[pos];
    }

    std::ostream& printFile(std::ostream& stream, unsigned tab=0) const;
    void readFile (std::istream &stream); // Return last identificator
    bool insertChild (size_t pos, Node & element );
    bool removeChild (size_t pos);    
    Node & operator = (const Node & obj);

    virtual ~Node();

    };

class Root : public Node
{

public:
    long lastId;
    
    Root():Node(this)
    {}
 
    /*~Root()
    {
    }*/

};

Node::~Node()
{
}



std::ostream& Node::printFile(std::ostream &stream, unsigned tab) const
{
    for(unsigned i = 0; i < tab; ++i)
        stream << ' ';

    stream << "Name = [" << Name << "]\n"; 

    for(unsigned i = 0; i < tab; ++i)
        stream << ' ';
    stream << " [" << pole1 << "]";
    stream << " [" << pole2 << "]";
    stream << " [" << level << "]";
    stream << " [" << childs.size() << "]";
    for(Nodes::const_iterator i = childs.begin(), end = childs.end(); i != end; ++i)
       i->printFile(stream, tab + 1);
   
    return stream;
}

bool Node::insertChild(size_t pos, Node & element)
{    
    Nodes::iterator p = Node::childs.begin();
    p += pos;
    Node::childs.insert(p,element);
    return true;
}

/*Node &Node::operator =(const  Node &obj)
{
    if (&obj == this) 
        return *this;
    Copy(obj);
    return *this;
}*/

bool Node::removeChild(size_t pos)
{
    Nodes::iterator p =  Node::childs.begin();
    p += pos;
    childs.erase(p);
    return  Node::childs.empty();
}

void Node::readFile(std::istream &stream)
{
    stream >> std::ws;
    stream.ignore(8);
    stream >> Name;
    
    stream >> std::ws;      stream.ignore(1); 
    stream >> pole1;   stream.ignore(2);
    stream >> pole2;   stream.ignore(2);
    stream >> level;   stream.ignore(2);
    stream >> size;    stream.ignore(2);

    childs.resize(size, Node(root));
    Name.resize(Name.size()-1);
    id = ++root->lastId;

    for(Nodes::iterator i = childs.begin(), end = childs.end(); i != end; ++i)
    {
        i->readFile(stream);
    }    
}

PM MAIL   Вверх
tonchitos
Дата 20.3.2008, 19:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



bsa, добрый человек! Спасибо!!!!! Спасибо преогромное!!!!


--------------------
– Люди забыли эту истину, – сказал Лис, – но ты не забывай: ты навсегда в ответе за всех, кого приручил.
PM MAIL   Вверх
baldina
Дата 20.3.2008, 19:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

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



ну и то, что bsa написал; я на это не обратил внимание
PM MAIL   Вверх
Страницы: (3) Все 1 2 [3] 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
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.4417 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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