Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.53/19: Рейтинг темы: голосов - 19, средняя оценка - 4.53
63 / 64 / 11
Регистрация: 27.02.2013
Сообщений: 1,116

Пишу примитивный никому не нужный контейнер

25.09.2014, 10:12. Показов 4044. Ответов 42
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
захотелось для практики написать аналог array из STL ну не полностью аналог, так, по своему как мне он был бы удобен... безо всяких лишних на мой взгляд переобъявлений типов аля "typedef size_t size_type", которых куча объявлена в реальном array и т.п. лишних вещей... в общем сейчас пока что проблема с конструктором копирования, вроде кажется правильно все, но x в main упорно хранит мусор в конце ну и + посмотрите вообще все очень плохо написано или как?

array.h
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
#include <iostream>
#include <initializer_list>
 
using namespace std;
 
template <typename T>
class array
{
private:
    //Указатель на память в которой хранится массив
    T* ptr;
 
    //Размер массива
    size_t _size;
 
public:
    //Конструктор по умолчанию
    array() : ptr(0), _size(0) {};
 
    //Конструктор копирования
    array(array& arr)
    {
        _size = arr._size;
        ptr = new T[arr._size];
        memcpy(ptr, arr.ptr, arr._size);
    }
 
    //Конструктор, создающий массив заданного размера
    array(size_t size) : _size(size), ptr(new T[size]) {}
 
    //Конструктор, инциализирующий массив
    array(initializer_list<T> values) : _size(values.size()), ptr(new T[values.size()])
    {
        const T* tmp = values.begin();
        for (int i = 0; i < _size; i++)
            ptr[i] = *tmp++;
    }
 
    //Деструктор
    ~array() { delete[] ptr; }
 
    //Перегрузка оператора [] для доступа к элементам массива
    T& operator [] (size_t index) { return ptr[index]; }
 
    //Получение размера массива
    size_t size() { return _size; }
 
    //Изменение размера массива
    void resize(size_t newsize)
    {
        T* tmp = new T[newsize];
        memcpy(tmp, ptr, _size < newsize ? _size : newsize);
        delete[] ptr;
        ptr = tmp;
        _size = newsize;
    }
};
main.cpp
C++
1
2
3
4
5
6
7
8
9
#include "array.h"
 
int main()
{
    array<int> a({ 2, 3, 1 });
    array<int> b(a);
    int x[] = { b[0], b[1], b[2] };
    return 0;
}
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
25.09.2014, 10:12
Ответы с готовыми решениями:

1 Апреля...Никому не веря
1 апреля - день, не внесенный ни в какие календари знаменательных дат и всенародных праздников и тем не менее засевший уже где-то в глубине...

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

Заменить контейнер vector, использовавшийся для хранения текстовых строк (листинг 2.3), на контейнер list
Здравствуйте форумчане, может кто объяснить как делать это задание и что собственно мы тут вообще делаем. сам листинг 2.3 ниже ...

42
Эксперт по математике/физикеЭксперт С++
 Аватар для Ilot
2226 / 1428 / 420
Регистрация: 16.05.2013
Сообщений: 3,651
Записей в блоге: 6
26.09.2014, 12:38
Студворк — интернет-сервис помощи студентам
0x10, суть не в этом. Ведь если исключение было выброшено на n-ом элементе, то для n-1 элементов деструкторы не будут вызваны, а это плохо... весьма плохо...
0
3258 / 2060 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
26.09.2014, 12:47
Цитата Сообщение от Ilot Посмотреть сообщение
то для n-1 элементов деструкторы не будут вызваны
Разве?
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
#include <iostream>
 
struct My {
    static int count;
    int id_;
 
    My(): id_{count++} {
        if (id_ == 10) throw 42;
    }
 
    ~My() {
        std::cout << "~" << id_ << std::endl;
    }
};
 
int My::count = 0;
 
int main() {
    try {
        new My[42];
    } catch (...) {
 
    }
}
Code
1
2
3
4
5
6
7
8
9
10
~9
~8
~7
~6
~5
~4
~3
~2
~1
~0
http://ideone.com/8cWJqb

Добавлено через 1 минуту
Ну ок, если совсем не отлавливать - будет просто аварийное завершение. Насколько это плохо - надо уже смотреть по ситуации.
1
Эксперт по математике/физикеЭксперт С++
 Аватар для Ilot
2226 / 1428 / 420
Регистрация: 16.05.2013
Сообщений: 3,651
Записей в блоге: 6
26.09.2014, 12:55
0x10, хм, а я почему-то думал иначе. Благодарю теперь учту на будущее.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
26.09.2014, 12:55
Помогаю со студенческими работами здесь

Зачем вы пишите никому не нужные сайты?
Поисковики это как газеты с объявлениями, можно за деньги и гарантировано, а можно попробовать опубликовать бесплатно. Но чтобы...

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

Какой смысл иметь СДЛ если он никому не нужен?
Здравствуйте! Мне вот интересно, СДЛ сайты, находящиеся в ЯК и приносящие около 5тр/месяц вообще хоть что-нибудь стОят? Хотел продать: ...

Народ, а никому не попадалась плата ардуино - под ЛУТ/смд?
собственно, рисовать лень. покупать долго, хотя нашел место, где продадут несобранную. Хочу сына немного научить феном работать. под...

Что значит НИКОМУ неизвестный (даже гуглу) атрибут SMART HDD?
У меня HDD WD Gold 1 TB Программа Victoria показала атрибут 16 GAS GUAGE как критический. А вот что он значит никто не знает. Нет вообще...


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

Или воспользуйтесь поиском по форуму:
43
Ответ Создать тему
Новые блоги и статьи
Модель здравосохранения 17. Планы на выгорание
anaschu 23.05.2026
Вот конкретная схема реализации: В классе Работник добавить: накопленнаяУсталость — растёт каждый час работы, снижается в перерывы и болезни коэффициентПрезентеизма — снижает продуктивность. . .
Изменение цветов в палитре gif файла aka фавикона
russiannick 23.05.2026
Изменение цветов в палитре gif файла, юзаемого как фавиконка в составе html-файла, помещенная в base64, средствами нативного Java Script, навеянное сном в майский день. Для работы необходим браузер,. . .
Модель здравосохранения 16. Слишком хорошие и здоровые сотрудники уходят, недовольные зарплатой
anaschu 23.05.2026
Отладка увольнений и настройка производительности Сегодня во второй половине дня разобрались с механикой увольнений и настроили коэффициент сложности заданий. Вот что было сделано. . . .
Как я стал коммунистом))) Модель сохранения здоровья сотрудников, запись блога номер 15
anaschu 23.05.2026
Внезапно хорошее здоровье сотрудников не нужно капиталистам?))
Модель здравоСохранения 15. Как мы чинили AnyLogic модель рабочего коллектива: сочленение диаграммы состояний болезней и поломок в ресурспул
anaschu 23.05.2026
Как мы чинили AnyLogic модель рабочего коллектива Сегодня разобрались с пятью багами, из-за которых модель либо падала с ошибкой, либо давала совершенно бессмысленные результаты. Каждый баг был. . .
Диалоги с ИИ
zorxor 23.05.2026
Насколько я понимаю - Вы - Искусственный Интеллект. Это так? Да, всё верно. Я — искусственный интеллект. Я представляю собой большую языковую модель, созданную для помощи в самых разных задачах. . . .
Модель здравосохранения 14. Собираем всю модель вместе.
anaschu 22.05.2026
Модель собрана. В будущих постах на видео я покажу, как она работает. В этом посте запускаем её, проверяем результаты и разбираем что можно с ней делать дальше. Перед запуском проверяем. . .
Модель здравоохранения 13. Добавление самой системы здравоохранения.
anaschu 22.05.2026
В предыдущем посте мы настроили болезни. Теперь добавим события, которые управляют здоровьем всего коллектива, а также настроим рабочий график и расчёт финансов. В Main создаём четыре события. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru