Форум программистов, компьютерный форум CyberForum.ru

Шаблоны, контейнеры, контейнер в контейнере - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ f2b http://www.cyberforum.ru/cpp-beginners/thread251532.html
подскажите как считать информацию(автора , название , год издания) из файла f2b и записать в txt, на си Добавлено через 31 минуту подскажите как считать информацию(автора , название , год издания) из файла f2b и записать в txt, на си ошибся , формат файла fb2
C++ IFrame приложение Доброе утро, ребят! Скачал в сети IFrame приложение для соц сети Контакт, залил файлы на хостинг, привязал к приложению, всё вроде-бы ничего, если бы не две проблемы 1) (Вложение 1) При нажатии на кнопку "Проверить инфу" - выбивает : The requested URL /add.php was not found on this server. Apache/2.2.16 (Ubuntu) Server at i.qweqwe.in Port 80 , а должно открываться вот что (вложение 2) со... http://www.cyberforum.ru/cpp-beginners/thread251528.html
прога про Копейку C++
Помогите составить прогу пож. Условие: Написать программу, которая после введенного с клавиотуры числа(в диапозоне от 1 до 99), проебразующего денежную единицу, подписываетслово "Копейка" в правельной форме. Например, 5 копеек, 41 копейка, 1 копейка и т.д. Короче нужно в деопозоно от 1 до 99 вводить числа и чтобы к ним было прибавлено правельное слово, (т.е. окончание). ЗАРАНЕЕ СПС!!! ...
C++ Преобразование векторов
Дан вектор А и вектор B. Если разность между максимальными элементами векторов больше 10, то из положительных элементов обеих векторов сформировать матрицу C. Иначе в векторе А за максимальным элементом вставить все элементы вектора B. Заранее благодарен за помощь в решении!)
C++ Метод Гаусса http://www.cyberforum.ru/cpp-beginners/thread251520.html
какой-то цикл конит. посмотрите пожалуйста что не так. #include <conio.h> #include <iostream.h> #include <math.h> //---------------------------------------------------------------------------
C++ Создать список с последовательным хранением и записать его в бинарный файл вообщем по условию задачи надо создать список с последовательным хранением и записать его в файл .bin. Данные берутся из текстового файла(имя которого передается как параметр командной строки или есть файла нет создается и заполняется пользователем) и хранятся в виде 1 seans 12.12.1222 12:56 1 1 Эта запись разбивается по полям структуры. Вообщем в чем проблема.Считывается из файла одна... подробнее

Показать сообщение отдельно
pito211
 Аватар для pito211
186 / 173 / 8
Регистрация: 22.03.2010
Сообщений: 612
03.03.2011, 14:09     Шаблоны, контейнеры, контейнер в контейнере
Всем привет!
Задумал написать класс EDeque<Type>

тело
C++
1
2
3
4
5
6
7
8
9
10
11
12
EDeque<string> test1;
    EDeque<EDeque<string> > test3;
    string var;
 
    for (int i = 0; i < 3; i++) {
        test1.clear(); //#1
        for (int j = 0; j < 3; j++) {
            cin >> var;
            test1.push_back(var);
        }
        test3.push_back(test1); //#2
    }
не работает, если брать контейнер внутри контейнера. При первом проходе он нормально помещает test1 в test3, смотрел деббагером. При втором проходе в месте #1 он поидеи должен очистить test1, он его очищает и при этом повреждается test3! Как они могут друг от друга зависеть при clear?
вот код EDeque<Type>
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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
#pragma once
 
#ifndef EDEQUE_H
#define EDEQUE_H
 
#include "EDequeItem.h"
 
template <typename Type> class EDeque
{
public:
 
    EDeque<Type>(): begin(0), end(0), _size(0) {  } //Пустой список
    /*EDeque(const EDeque &Q): begin(0), end(0) { //Инициализация копии
        copy(Q);
    }*/
    Type &operator[](const int index) {
        EDequeItem<Type> *current = begin;
        for (int i = 0; i < index; i++) {
            current = current->next;
        }
        return current->item;
    }
    /*EDeque& operator=(const EDeque<Type> &target) {
        EDeque<Type> tmp;
        for (int i = 0; i < size; i++) {
            tmp.push_back(target.operator[](i));
        }
        return *this;
    }*/
 
    void push_back(const Type &value); //Добавляет элемент в конец
    void push_front(const Type &value); //В начало
 
    void pop_back();
    void pop_front();
 
    bool empty() {
        return (_size == 0);
        //return (begin == 0); //Устарело
    }
 
    void clear();
    /*~EDeque() { 
        clear();
        delete begin, end, current, _size;
    }*/
 
    int size() {
        return _size;
    }
 
private:
    int _size; // Число элементов
    EDequeItem<Type> *begin;
    //EDequeItem<Type> *current; //Устарело
    EDequeItem<Type> *end;
 
    //EDequeItem *vector;
    /*void copy(const EDeque&);*/
};
 
template <typename Type> void EDeque<Type>::push_back(const Type &value) {
    EDequeItem<Type> *pt = new EDequeItem<Type>(value);
    EDequeItem<Type> *ptemp; //Нужен для обмена между 
 
    if (empty()) {
        begin = pt;
        end = pt;
        end->prev = begin;
    }
    else {
        ptemp = end;
        end->next = pt; //Настройка ссылки на следующий элемент у (бывшего) последнего элемента
 
        end = pt; // Последний элемент ссылается на только что добавленны           
        /*//end->prev = current; //Устарело
        //current = pt;*/        //
        end->prev = ptemp;
    }
 
    _size++;
 
}
 
template <typename Type> void EDeque<Type>::push_front(const Type &value) {
    EDequeItem<Type> *pt = new EDequeItem<Type>(value);
 
    if (empty()) {
        begin = end = pt;
    }
    else {
        begin->prev = pt;
        begin = pt;
    }
 
    _size++;
 
}
 
template <typename Type> void EDeque<Type>::clear() {
    while (!empty()) {
        pop_back();
    }
}
 
template <typename Type> void EDeque<Type>::pop_back() {
    _size--;
    EDequeItem<Type> *pt = end;
    end = end->prev; //Теперь энд указывает на предыдущий объект класса EDequeItem!
    delete pt; //Можно удалить объект ссылавшийся на энд
}
 
template <typename Type> void EDeque<Type>::pop_front() {
    _size--;
    EDequeItem<Type> *pt = begin;
    begin = begin->next; //Теперь бегин указывает на следующий объект класса EDequeItem!
    delete pt; //Можно удалить объект ссылавшийся на энд
}
 
#endif
при таком выводе
C++
1
2
3
4
5
6
for (int i = 0; i < 3; i++) {
        for (int j = 0; j < 3; j++) {
            cout << test3[i][j] << "\t";
        }
        cout << endl;
    }
выводится только последний вектор три раза(

ну и хотелось бы услышать мнение экспертов насчёт читабельности кода? по десятибальной шкале
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 02:41. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru