Форум программистов, компьютерный форум, киберфорум
Visual C++
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/6: Рейтинг темы: голосов - 6, средняя оценка - 5.00
21 / 20 / 6
Регистрация: 03.12.2008
Сообщений: 85
1

Списки, векторы и прочие

09.12.2008, 05:36. Показов 1052. Ответов 4
Метки нет (Все метки)

Есть работающая консольная прога со списками. Описана структура (данные о деталях - длинна, ширина и стоимость)
C++
1
2
3
4
5
6
7
8
struct doubler
{
    int d_Length;
    int d_Width;
    int d_Value;
    struct doubler *next; 
    struct doubler *prev; 
};
и функция добавления эл-та в конец списка
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
void add_end(int l, int w, int v, struct doubler **r)
{
    struct doubler *newr, *r1=*r;
    newr=new  doubler;
    newr->next=NULL;
    newr->d_Length=l;
    newr->d_Width=w;
    newr->d_Value=v;
//если списка не было до вызова функции
    if(*r==NULL)
    {
        *r=newr;
        newr->prev=NULL;
    }
    else
//если уже было что-то
    {
        while(r1->next!=NULL)
        r1=r1->next;
 
        r1->next=newr;
        newr->prev=r1;
        newr->next=NULL;
    }
}
Пытаюсь пересадить это дело в оконное приложение, но тут возникают проблемы.
При выполнении как-бы игнорируется уловие if(*r==NULL), дебагер показывает ошибку в строке while(r1->next!=NULL). При этом *r показывает равным 0xcdcdcdcd... Как проверить условие существования списка вообще? В консольной проге в cpp файле работало вот это
C++
1
2
    struct doubler *head;
    head=NULL;
А в оконной не получается уже на этапе компиляции. Тем более, не понятно, где делать это объявление? Я делаю глобально, так так данные в список заносятся из далога, а обработкой данных занимается функция главного окна. Если включить список в какой-либо класс, то придется писать кучу лишних функций. Сделать список классом (чем черт не шутит) тоже не получилось. Пытался таким способом задать первоначальные значения, чтобы их черт возьми проверить, но не осилил(

Пытался через векторы, но там не получилось даже сделать вектор членом класса главного окна. Тем более что с векторами я вообще впервые столкнулся, не знаю даже с какого бока к ним подобраться. И хедера <cliext/vector> у меня так и вовсе нет.. Неужто пора сишку 6.0 сдавать в утиль? Боюсь времени разбиратся в версии поновее уже нет...

Добавлено через 29 минут 16 секунд
в Dev-C++ тоже не нашлось искомого. если все совсем плохо, то хотя бы посоветуйте, какую версию Visual Studio приобрести/скачать/отобрать в темном переулке/etc.
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
09.12.2008, 05:36
Ответы с готовыми решениями:

Разреженная матрица и векторы (списки списков)
Нужна помощь, дали семестровые задания, мне попалось такое: Разреженные матрицы и вектора (списки...

Что лучше: динамические массивы, векторы, списки, map контейнеры или что-то ещё?
Привет всем! Помогите правильно алгоритм выбрать. Надо получать из файлов (около 8000 файлов)...

Дан файл, элементами которого являются n-мерные векторы. Векторы с наибольшим модулем перенести в конец файла
Вот имеется подобная программа (дали как пример...... в этой программе максимальные значения из...

Дан файл, компонентами которого являются n-мерные векторы. Векторы с наибольшим модулем перенести в конец файла
Дан файл, компонентами которого являются n-мерные векторы. Векторы с наибольшим модулем перенести в...

4
Эксперт С++
2253 / 768 / 25
Регистрация: 27.05.2008
Сообщений: 1,496
09.12.2008, 10:16 2
А с чего вы взяли,что там будет NULL? Обычно начальное
значение переменной(включая указатели)не предугадывается. Дебаггер заполняет память всякими там cdcdcd, есть такое дело.Обычно,на чистом СИ,пишут ф-ю вроде
Код
 
void InitList(List * list) {
list->next=NULL;
list->prev=NULL;
};
На С++ вопрос решается конструкторами.
0
21 / 20 / 6
Регистрация: 03.12.2008
Сообщений: 85
09.12.2008, 12:39  [ТС] 3
C++
1
2
3
4
void InitList(List * list) {
list->next=NULL;
list->prev=NULL;
}
это понятно, но коли объект в списке один, то и ссылки на следующий/предыдущий эл-ты у него NULL. а когда в списке еще нет ни одного эл-та? и как проверить есть эл-ты или нет?
0
Эксперт С++
2253 / 768 / 25
Регистрация: 27.05.2008
Сообщений: 1,496
09.12.2008, 16:24 4
FOLKEN,а ты не используй первый элемент вообще. Считай,что список начинается со второго. Т.е есть у тебя List list;
list->next - его первый элемент. Если он еще нулевой - значит его еще нет.
1
21 / 20 / 6
Регистрация: 03.12.2008
Сообщений: 85
09.12.2008, 16:50  [ТС] 5
разрази меня гром! отличная мысль!
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
09.12.2008, 16:50

Найти базисные векторы системы и выразить остальные векторы через базисные
Привет всем. Задание такое: найти базисные векторы системы и выразить остальные векторы через...

Списки, списки, списки. не все так просто
Написать функцию, которая принимает 2 списка, содержащие одинаковое число строк, затем изменяет...

На рисунке под номерами 1, 3 указаны векторы скорости , а под номерами 2, 4 – векторы Умова-Пойнтинга
2.9. На рисунке под номерами 1, 3 указаны векторы скорости , а под номерами 2, 4 – векторы...

Как преобразовать вложенные списки из строки в обычные списки?
Доброе утро, форумчане. Подскажите пожалуйста, мне нужно написать скрипт, который разбирает...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru