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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> C++ список, одна функция 
V
    Опции темы
delminika
Дата 17.4.2006, 14:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Помогите, пожалуйсто, с последней функцией.
Нужно написать функцию, которая уберает из списка те элементи, у каторых значение совподает с порядковым номером.

P.S.если Вы знаитн какие нибудь полездние сайти,чтобы освоить эту темму, напишите пожалуйсто  smile  
Зарание спосибо!!!!  smile 

 
PM MAIL   Вверх
nostromo
Дата 17.4.2006, 15:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Код

#include <list>

typedef std::list<int> List;
        
List data;

... // здесь инициализируем список data

List::iterator iter = data.begin();
for(int i = 0; iter != data.end(); ++i, ++iter)
    if (i == (*iter))
        iter = data.erase(iter);
 
--------------------
На пыльных тропинках далеких планет останутся наши следы.
PM MAIL   Вверх
Fixin
Дата 17.4.2006, 15:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ёжик
***


Профиль
Группа: Комодератор
Сообщений: 1357
Регистрация: 6.1.2004

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



Что за список-то? свзязный, или ты так массив называешь? 
PM MAIL ICQ   Вверх
delminika
Дата 17.4.2006, 15:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



   Структура! Там последней функции нет, никак не получается  smile  В сылке есть ролная програмка  smile 


Код

]#include <iostream>
using namespace std;

struct elem                    
       {
       friend class saraksts;  
       elem *next;             // ukazatelj
       int num;                // element
};

class saraksts
      {
      private:
              elem *sak;         // nachalo spiska
              elem *end;         // konec spiska
      public:                    // metodi
             saraksts();         
             ~saraksts();
             void pievienot(int);
             void erase();
             void print();
             void izmestmaz();
      };
             
             saraksts::saraksts()                    // konstruktor
                  { 
                  sak = end = NULL;
                  };
                  
             saraksts::~saraksts()                  // destruktor
                  {
                  erase();
                  };
                  
             void saraksts::pievienot(int x)        // metod, katorij prisoedinjaet v konec
             {
                  elem *tmp = new elem;
                  tmp -> next = NULL;
                  tmp -> num = x;
                  if ( sak == NULL )                // esli spisok pustoj,
                  {
                     sak = tmp;                     // prisoedininie elementa v nachalo
                  }
                  else
                  {
                     end -> next = tmp;             // esli ne pustoj, prisoidinjaem v konec
                  }
                  end = tmp;
             };

             void saraksts::erase()                 // metod, kotorij stiraet spisok
             {
                  elem *tmp;                        // novij pointer
                  while ( sak != NULL )             // poka nachalo ne odinakovoe s koncom
                  {
                        tmp = sak;
                        sak = sak -> next;
                        delete tmp;
                  }
             };

             void saraksts::print()                 // print elements
             {
                  int num;
                  elem *tmp = sak;
                  if ( tmp == NULL )              
                     cout << "Esli spisok pustoj" << endl;
                  else {
                       while ( tmp != NULL ) {
                             cout << tmp -> num << " ";
                             tmp = tmp -> next; 
                       }
                  }
             };

            
            
            
            
             void saraksts::izmestmaz()           
 
PM MAIL   Вверх
Fixin
Дата 17.4.2006, 15:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ёжик
***


Профиль
Группа: Комодератор
Сообщений: 1357
Регистрация: 6.1.2004

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



Цитата(delminika @  17.4.2006,  15:14 Найти цитируемый пост)
В сылке
В какой ссылке?
 
PM MAIL ICQ   Вверх
nostromo
Дата 17.4.2006, 15:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Что-то вроде такого?
Код

void saraksts::izmestmaz() 
{
    int i = 0;
    elem *p1 = sak;
    elem *p2 = sak;
    while(next != end)
    {
        if (p2->num == i)
        {
            p1->next = p2->next;
            delete p2;
        } 
        else 
        {
            p1 = p2;
            p2 = p2->next;
        }
        ++i;
    }
}
 
--------------------
На пыльных тропинках далеких планет останутся наши следы.
PM MAIL   Вверх
delminika
Дата 17.4.2006, 15:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Странно, я посилала файл...   smile 

Спасибо, сейчас попробуем  smile  
PM MAIL   Вверх
delminika
Дата 17.4.2006, 16:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



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

Код

void saraksts::izmestmaz() 
{
    int i = 0;
    elem *p1 = sak;
    elem *p2 = sak;
    while(next != end)     // ВОТ ЗДЕСЬ ОШИБКА 
    {
        if (p2->num == i)
        {
            p1->next = p2->next;
            delete p2;
        } 
        else 
        {
            p1 = p2;
            p2 = p2->next;
        }
        ++i;
    }
}
 
PM MAIL   Вверх
Fixin
Дата 17.4.2006, 16:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ёжик
***


Профиль
Группа: Комодератор
Сообщений: 1357
Регистрация: 6.1.2004

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



Ну, укажи, какая ошибка smile  
PM MAIL ICQ   Вверх
nostromo
Дата 17.4.2006, 17:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Описка. Вместо
while(next != end)
нужно
while(p2 != end)

Добавлено @ 17:06 
И еще, даже если заработает, нужно еще посмотреть случаи удаления первого и/или последнего элемента списка. Эти случаи, возможно, придется обработать отдельно за циклом. 
--------------------
На пыльных тропинках далеких планет останутся наши следы.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Центр помощи"

ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Несоблюдение правил может повлечь за собой самые строгие меры от закрытия/удаления темы до бана пользователя!


  • Название темы должно отражать её суть! (Не следует добавлять туда слова "помогите", "срочно" и т.п.)
  • При создании темы, первым делом в квадратных скобках укажите область, из которой исходит вопрос (язык, дисциплина, диплом). Пример: [C++].
  • В названии темы не нужно указывать происхождение задачи (например "школьная задача", "задача из учебника" и т.п.), не нужно указывать ее сложность ("простая задача", "легкий вопрос" и т.п.). Все это можно писать в тексте самой задачи.
  • Если Вы ошиблись при вводе названия темы, отправьте письмо любому из модераторов раздела (через личные сообщения или report).
  • Для подсветки кода пользуйтесь тегами [code][/code] (выделяйте код и нажимаете на кнопку "Код"). Не забывайте выбирать при этом соответствующий язык.
  • Помните: один топик - один вопрос!
  • В данном разделе запрещено поднимать темы, т.е. при отсутствии ответов на Ваш вопрос добавлять новые ответы к теме, тем самым поднимая тему на верх списка.
  • Если вы хотите, чтобы вашу проблему решили при помощи определенного алгоритма, то не забудьте описать его!
  • Если вопрос решён, то воспользуйтесь ссылкой "Пометить как решённый", которая находится под кнопками создания темы или специальным флажком при ответе.

Более подробно с правилами данного раздела Вы можете ознакомится в этой теме.

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

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


 




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


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

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