Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.74/34: Рейтинг темы: голосов - 34, средняя оценка - 4.74
║XLR8║
 Аватар для outoftime
1212 / 909 / 270
Регистрация: 25.07.2009
Сообщений: 4,360
Записей в блоге: 5

Создание своего вектора

16.01.2010, 11:31. Показов 6581. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Мне пришлось юзать длинку, для перевода больших чисел в разных системах счисления, юзать СТЛ нельзя, вот и пришлось создавать клас, который будут помогать проводить теже действия что и вектор. На даный момент есть следуущее:
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
class vector
{
    int* a,
         top;
public:
    vector(int &n) { top = 0; a = new int[n]; }
    ~vector(){ delete a; }
    void push_back(int &n)
    {
        a[top++] = n;
    }
    int pop_back()
    {
        return a[--top];
    }
    int back()
    {
        return a[top-1];
    }
    bool empty()
    {
        return !top;
    }
};
на базе этого класа не могу перезагрузить еще два оператора: "=" и "[]", первый - для присваивания вектору значений второго вектора, воторой - для обращения к елементу масива вектора по определенному индексу, как масиве..
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
16.01.2010, 11:31
Ответы с готовыми решениями:

Ошибка при резервировании памяти для своего(!) вектора
Всем здравствуйте! Возможно, из названия темы не совсем понятен вопрос, поэтому уточню саму суть: Пишу свой шаблонный класс вектора и...

Не получается использовать итераторы вектора в качестве итераторов своего класса
Пишу класс матрицы, основанный на векторе. Хочу его сделать stl-совместимым. Т.к. класс основан на векторе, решил возвращать итераторы...

Создание своего Event для своего класса
как создать событие для своего класса? У C# нужно создать свое делегат, потом создать экземпляр этого делегата, и из вне привязать...

10
Maniac
Эксперт С++
 Аватар для ISergey
1464 / 965 / 160
Регистрация: 02.01.2009
Сообщений: 2,820
Записей в блоге: 1
16.01.2010, 11:48
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
#include <iostream>
 
using namespace std;
 
class vector
{
    int* a;
    int size;
    int top;
public:
    vector():size(0), top(0), a(0) { }
 
    vector(int n):size(n), top(0), a(0)
    { 
        a = new int[size];
    }
    vector(const vector& r):size(0), top(0), a(0)
    {
        *this = r; 
    }
 
    ~vector()
    { 
        delete[] a; 
    }
 
    int &operator[] (int i){ return a[i]; }
 
    vector &operator = (const vector& r)
    {
        if(&r == this) return *this;
        delete[] a;
 
        a = new int[r.size];
        for(int i = 0; i < r.size; ++i)
            a[i] = r.a[i];
        size = r.size;
        return *this;
    }
 
    void push_back(int n)
    {
        //Проверку делай чтобы не выйти за пределы массива..
        a[top++] = n;
    }
 
    int pop_back()
    {
        //!
        return a[--top];
    }
 
    int back()
    {
        //!
        return a[top-1];
    }
 
    bool empty()
    {
        return !top;
    }
};
int main()
{
    vector v1(10);
    vector v2;
 
    v1[0] = 1;
    v1[1] = 2;
 
    v2 = v1;
 
    cout << v2[0] << ' ' << v2[1] << endl;
    return 0;
}
1
║XLR8║
 Аватар для outoftime
1212 / 909 / 270
Регистрация: 25.07.2009
Сообщений: 4,360
Записей в блоге: 5
16.01.2010, 14:27  [ТС]
ISergey, насколько я понял, size и есть top.. верно?

Добавлено через 5 минут
Цитата Сообщение от ISergey Посмотреть сообщение
if(&r == this)
сравнение векторов также самому писать? насколько я понимаю чисто класы сравнивать нельзя, даже если у них одинаковые поля и содержимое

Добавлено через 18 минут
а, стоп, там была ссылка, ок все норм..
0
MCSD: APP BUILDER
 Аватар для IT_Exp
8795 / 1074 / 104
Регистрация: 17.06.2006
Сообщений: 32,602
16.01.2010, 14:52
outoftime,

правильный вариант empty:

bool empty() const { return !top; }

+ также:

const int& operator[](size_t i) const { return a[i]; }
1
║XLR8║
 Аватар для outoftime
1212 / 909 / 270
Регистрация: 25.07.2009
Сообщений: 4,360
Записей в блоге: 5
16.01.2010, 15:17  [ТС]
ISergey, спасибо еще раз, пока что все норм, не могли бы вы помочь реализировать еще и операции сложения векторов и умножение вектора на число (перенос розрядов и все остальное смогу сам, мне только как перегрузить операторы *=, и +, *= уможение на число, + - сумирование векторов).

Добавлено через 2 минуты
вот что у меня есть пока:
NOTATION.CPP
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
#include <iostream>
#include <windows.h>
#include "vector.hpp"
 
#define FOR(i,a,b) for (int i(a), _n(b); i < _n; ++i)
 
//using namespace std;
 
//оголошення констант
const int size = 1000,              //максимальний розмір введених/отриманих данних
          tSleep = 1000,            //час затримки при виході
          base = 1000*1000*1000;    //кількість цифр в одному елементі
 
void Menu();
vector notation(int from, int to, vector key);
 
int main()
{
    Menu();
    return 0;
}
 
void Menu()
{
    while (1)
    {
        int from, to;
        char* s = new char[size];
/*        cout << "Press your orign notation:   " << endl;
        cin >> from;
        cout << "Press your desired notation: " << endl;
        cin >> to;
        cout <<  "Enter number: " << endl;
*/        
        printf("Press your orign notation:   \n");
        scanf("%d",&from);
        printf("Press your desired notation: \n");
        scanf("%d",&to);
        printf("Enter number: \n");
        scanf("%s",&s);
        
        vector in(size);
        FOR(i,0,size)
        {
            if (s[i] == '\n') break;
            in[i] = (int)s[i] - '0';
        }            
        
        vector out = notation(from, to, in);
        
        FOR(i,0,out.size())
            printf("%d",out[i]);
        printf("\n");
                    
        int de;
/*        cout << "1 - Exit\t\t2 - Continue\n";
        cin >> de;
*/
        printf("1 - Exit\t\t2 - Continue\n");
        scanf("%d",&de);
        if (de == 1)
        {
            //cout << "Exiting..";
            printf("Exiting..");
            Sleep(tSleep);
        }
    }
}
 
vector notation(int from, int to, vector key)
{
    vector res(size),
           base(size),
           ds(size);
    ds.push_back(0);
    for (int i(key.size()); i > -1; --i)
    {
        
    }
    base.push_back(1);
    FOR(i,0,key.size())
    return res;
}
и
VECTOR.HPP
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
class vector
{
public:
    vector(int &n): top(0), a(0), sz(n)
    {
         a = new int[n]; 
    }
    vector(const int &n): top(0), a(0), sz(n)
    { 
        a = new int[n]; 
    }
    ~vector()
    { 
        delete[] a; 
    }
    void push_back(int &n)
    {
        if (top == sz) return;
        a[top++] = n;
    }
    void push_back(int n)
    {
        if (top == sz) return;
        a[top++] = n;
    }
    int pop_back()
    {
        return a[--top];
    }
    int back()
    {
        return a[top-1];
    }
    bool empty()
    {
        return !top;
    }
    int size()
    {
        return sz;
    }
    int &operator[] (int &n) 
    { 
        return a[n]; 
    }
    vector &operator = (const vector &n)
    {
        if (&n == this) return *this;
        delete[] a;
        a = new int[n.top];
        for (int i = 0; i < n.top; ++i)
            a[i] = n.a[i];
        top = n.top;
        return *this;
    }
private:
    int* a,
         top,
         sz;
};


Добавлено через 6 минут
Цитата Сообщение от Rififi Посмотреть сообщение
bool empty() const { return !top; }
зачем использовать const ??
0
Эксперт С++
 Аватар для CyBOSSeR
2348 / 1721 / 149
Регистрация: 06.03.2009
Сообщений: 3,675
16.01.2010, 15:20
Цитата Сообщение от outoftime Посмотреть сообщение
зачем использовать const ??
outoftime, почитать можно здесь.
1
MCSD: APP BUILDER
 Аватар для IT_Exp
8795 / 1074 / 104
Регистрация: 17.06.2006
Сообщений: 32,602
16.01.2010, 15:24
outoftime,

зачем использовать const ??

const vector v;

очевидно, что в начальном состоянии этот вектор пуст.
попробуй определить его размер с помощью не-константной версии empty.
1
1261 / 799 / 108
Регистрация: 16.09.2009
Сообщений: 2,010
16.01.2010, 15:27
Может кто подскажет как сделать контейнер вектор, а не просто динамический массив.
Для изменение размера динамического массива, где то читал, что используется какой-то специальный
алгоритм, может кто подскажет, как этот алгоритм выглядит.
1
║XLR8║
 Аватар для outoftime
1212 / 909 / 270
Регистрация: 25.07.2009
Сообщений: 4,360
Записей в блоге: 5
16.01.2010, 20:28  [ТС]
Цитата Сообщение от outoftime Посмотреть сообщение
как перегрузить операторы *=, и +, *= уможение на число, + - сумирование векторов
знаете?

Добавлено через 13 минут
по аналогии с vector &operator = перегрузил *=, но это унарная операция, а бинарная - сложение??
C++
1
2
3
4
5
6
vector &operator *= (const int &n)
    {
        for (int i = 0; i < sz; ++i)
            a[i] *= n;
        return *this;
    }
Добавлено через 23 минуты
можете сказать так ли я перегрузил "+":
C++
1
2
3
4
5
6
7
8
    vector &operator + (const vector &b)
    {
        for (int i = 0; i < sz; ++i)
        {
            a[i] = b.a[i];
        }
        return *this;
    }
0
Эксперт С++
 Аватар для CyBOSSeR
2348 / 1721 / 149
Регистрация: 06.03.2009
Сообщений: 3,675
16.01.2010, 20:31
Цитата Сообщение от outoftime Посмотреть сообщение
можете сказать так ли я перегрузил "+":
C++
1
2
3
4
5
6
7
8
    vector &operator + (const vector &b)
    {
        for (int i = 0; i < sz; ++i)
        {
            a[i] = b.a[i];
        }
        return *this;
    }
Необходимо добавить проверку, что вектора имеют одинаковый размер.
1
║XLR8║
 Аватар для outoftime
1212 / 909 / 270
Регистрация: 25.07.2009
Сообщений: 4,360
Записей в блоге: 5
16.01.2010, 20:39  [ТС]
значит верно, они у меня все с одинаковым размером, тупо, но так проще.. тем более мне их надо всего 2, размеры векторов задаются константой в NOTATION.CPP
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
16.01.2010, 20:39
Помогаю со студенческими работами здесь

Создание нового вектора посредством выборки значений данного вектора
Добрый день! Знаю, вопрос совсем простецкий, но как-то я совсем запуталась... Есть вектор из 500-а значений, как на основе него сделать...

Создание контейнера (вектора), хранящего вектора разной размерности
Можно ли в матлабе создать вектор, который будет хранить вектора разной размерности? Добавлено через 56 секунд При этом размеры как...

Создание своего компонента
Всем привет. В общем не могу найти как реализовать свою идею. А идея такова. Например пишу в документе такой код: ...

Создание своего TextBlock
Здравствуйте. Возник вопрос: как можно создать свой текстблок, но чтобы справа и слева от него были какие-то фигуры? У меня получилось...

Создание своего компонента
Всем привет! Я в java новичок, так что возник такой вопрос: как правильно создать свой компонент? Я создал класс, он наследуется от...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка. Рецензия / Мнение/ Перевод https:/ / **********/ gallery/ thinkpad-x220-tablet-porn-gzoEAjs . . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru