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

Переопределение размера массива указателей - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Чтение файлов - исправить ошибки в коде http://www.cyberforum.ru/cpp-beginners/thread1241114.html
Добрый день. Возникла проблема, с которой раньше не сталкивался: файл не открывается. Искал с интернете, в учебниках, в предыдущих программах, которые писал - ничего не работает. #include "stdafx.h" #include <iostream> #include <fstream> using namespace std; int _tmain(int argc, _TCHAR* argv) {
C++ Создать класс, в котором можно сохранить любой вызываемый объект или функцию Возникла идея создать класс, в котором можно сохранить любой вызываемый объект или функцию. Что то наподобие std::function, но только не параметризирован, с использованием технологии Type Erasure. Вот такой первый набросок получился (естественно не рабочий):#include <iostream> #include <string> #include <memory> #include <vector> #include <boost/type_traits/function_traits.hpp> class... http://www.cyberforum.ru/cpp-beginners/thread1241101.html
C++ Error LNK2019: ссылка на неразрешенный внешний символ
Здрасте, Потребовалось вызвать dll из другой папки, пришлось переписывать импорт под динамический вызов, но тут полезли ероры. myIDirect3DDevice9.obj : error LNK2001: неразрешенный внешний символ ""public: static int (__cdecl* TwBarFunc::TwWindowSize)(int,int)" (?TwWindowSize@TwBarFunc@@2P6AHHH@ZA)" 1>myIDirect3DDevice9.obj : error LNK2001: неразрешенный внешний символ ""public: static...
Односвязный список: В чём разница между struct и class? C++
После неудач работы с Vector, а так же отсутствия (Хотя, скорее всего, я просто плохо искал) хорошей русской документации по нему, решил запилить свой велосипед с самоваром и тёрками. Список состоит из шаблона класса "заголовка" и шаблона класса элемента. В шаблоне ссылка на первый элемент, размер списка и функции по работе со списком. Основу элемента списка составляет указатель на переменную...
C++ Создание и удаление объекта. Ошибка 134 в Linux http://www.cyberforum.ru/cpp-beginners/thread1241052.html
Имеется следующий класс class BoardView { private: Board *brd; void Show(); public:
C++ Как разделить результат, возвращаемый Multi curl? 1)Я вообще непонимаю зачем нужна функция static int writer(char *data, size_t size, size_t nmemb, string *buffer) как по мне делает какую-то ерунду. 2) На php курл реализован как-то лучше)) так как результат работы курла возвращает функция curl_exec аналог в с++ curl_easy_setopt который возвращает лишь статус(( ну да ладно вопрос в другом, ниже приведён код с использованием мультикурла,... подробнее

Показать сообщение отдельно
Iksyara
0 / 0 / 0
Регистрация: 03.11.2014
Сообщений: 3
03.11.2014, 06:06     Переопределение размера массива указателей
Недавно тоже нужна была такая хрень. Пришлось писать вот это. Оно?))

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
#pragma once
#include <Windows.h>
 
template<class T>
class Massive
{
public:
    Massive()
    {
        m_count = 0;
        m_massive = NULL;
    }
    ~Massive()
    {
        RemoveAll();
    }
    void Add(T* data)
    {
        T** temp = new T*[m_count+1];
 
        for(int i = 0; i < m_count; i++)
            temp[i] = m_massive[i];
 
        temp[m_count] = new T;
        *temp[m_count] = *data;
        m_count++;
 
        delete m_massive;
        m_massive = temp;
    }
    void Add(T* data, int id)
    {
        if(id < 0 || id >= m_count) return;
 
        T** temp = new T*[m_count+1];
 
        for(int i = 0; i < id; i++)
            temp[i] = m_massive[i];
 
        temp[id] = new T;
        *temp[id] = *data;
 
        for(int i = id; i < m_count; i++)
            temp[i+1] = m_massive[i];
 
        m_count++;
 
        delete m_massive;
        m_massive = temp;
    }
    void Remove(int id)
    {
        if(id < 0 || id >= m_count) return;
 
        T** temp = new T*[m_count-1];
 
        for(int i = 0, j = 0; i < m_count-1; i++, j++)
        {
            if(j == id) j++;
            temp[i] = m_massive[j];
        }
 
        delete m_massive[id];
        m_count--;
 
        delete m_massive;
        m_massive = temp;
    }
    void RemoveAll()
    {
        for(int i = 0; i < m_count; i++)
            delete m_massive[i];
        delete m_massive;
 
        m_massive = NULL;
        m_count = 0;
    }
    void Swap(int id1, int id2)
    {
        T data;
 
        data = *m_massive[id1];
        *m_massive[id1] = *m_massive[id2];
        *m_massive[id2] = data;
    }
    T* operator[](int id) const
    {
        if(id < 0 || id >= m_count) return NULL;
        return m_massive[id];
    }
    int Count() const
    {
        return m_count;
    }
private:
    int         m_count;
    T**         m_massive;
};
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
#include <iostream>
#include "Massive.h"
 
struct s_data
{
    wchar_t name[255];
};
 
Massive<s_data> mass;
 
void Print()
{
    for(int i = 0; i < mass.Count(); i++)
        std::wcout << i << L" - " << mass[i]->name << std::endl;
}
 
int main()
{
    wchar_t buff[255];
    s_data data;
 
    std::wcout << L"*****|dobavili 5 chelovek|*****" << std::endl;
    wcscpy_s(data.name, L"Petrov");     mass.Add(&data);
    wcscpy_s(data.name, L"Sidorov");    mass.Add(&data);
    wcscpy_s(data.name, L"Ivanov");     mass.Add(&data);
    wcscpy_s(data.name, L"Smirnov");    mass.Add(&data);
    wcscpy_s(data.name, L"Morozov");    mass.Add(&data);
    Print();
    std::wcout << L"*****|Ubrali Sidorova|*****" << std::endl;
    mass.Remove(1);
    Print();
    std::wcout << L"*****|Postavili Sokolova pered Smirnovim|*****" << std::endl;
    wcscpy_s(data.name, L"Sokolov");    mass.Add(&data, 2);
    Print();
    std::wcout << L"*****|Pomenyali mestami Sokolova i Smirnova|*****" << std::endl;
    mass.Swap(2, 3);
    Print();
    std::wcout << L"*****|Udalili vseh|*****" << std::endl;
    mass.RemoveAll();
    Print();
 
    while(true)
    {
        std::wcout << L">:"; std::wcin >> buff;
        if(!wcscmp(buff, L"quit")) break;
    }
    return 0;
}
Добавлено через 14 минут
Со связанными списками еще лучше получится) но тут вроде как, о переопределении размера массива указателей с сохранением данных))))
 
Текущее время: 07:13. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru