Форум программистов, компьютерный форум, киберфорум
Наши страницы

Как достать объект-контейнер, а не его элемент - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Упорядочивание массива структур по нескольким полям http://www.cyberforum.ru/cpp-beginners/thread1203105.html
Есть программа,которая сортирует студентов по году рождения. #include <conio.h> #include <iostream> #include <stdio.h> const int n=3; struct student { char fio; char god; };
C++ Не хочет компилироваться, код верный Вроде бы и простая фигня, но.. не могу откомпилировать. Помогите разобраться. #include<iostream.h> const n=50; void main() { int* m = new int n; int k,i,c,f; cout<<"\nВведите количество... http://www.cyberforum.ru/cpp-beginners/thread1203099.html
Районная олимпиада по программированию 2011-12 (ошибка!) C++
Похоже что я нашел ошибку помогите мне подтвердив ее или опровергнуть вот задача ! Для иллюстрации метода математической индукции в учебниках времен СССР всегда приводилась следующая задача:...
C++ Определитель матрицы. Символьный вид
Написать программу которая выводит формулу определитель матрицы в символьном виде для n-го случая. Есть код для нахождения диагоналей. Но в нем вроде не работает ss >> tstr; #include <iostream>...
C++ Анализ твиттов http://www.cyberforum.ru/cpp-beginners/thread1203058.html
#include <iostream> #include <fstream> #include <sstream> #include <iterator> #include <vector> #include <map> #include <string> using namespace std; map<int, int> Max_Time; struct Time
C++ Копирование элементов из старой матрицы в новую. Динамическое распределение памяти Столкнулся с такой задачей : Вводится матрица. Если в матрице наибольший элемент находится над главной диагональю, то программа формирует новую матрицу, удалив из исходной столбец и строку, на... подробнее

Показать сообщение отдельно
kordax
4 / 4 / 1
Регистрация: 08.06.2014
Сообщений: 89

Как достать объект-контейнер, а не его элемент - C++

08.06.2014, 23:07. Просмотров 989. Ответов 36
Метки (Все метки)

Добрый вечер всем.

Возник вопрос.
Я читал Страуструпа и на одной из его глав, есть упражнение по созданию класса-контейнера, в котором также есть контейнеры (например vector и string).
Суть следующая:

У меня есть Структура S и шаблон, со своим распределителем памяти.
В структуре S есть указатель val, который хранит адрес 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
25
26
27
template <class T, class A = allocat<T> > struct S
{
private:
    unsigned int buffer;
    unsigned int size;
    T* val;
    A alloc;
public:
    //S(T t) : val(t) { cout << "Constructor called" << endl; }
 
    S() :size(0), buffer(0), val(0) { cout << "Default constructor called" << endl; }
    S(const unsigned int sz) :size(0), buffer(0), val(0) { resize(sz); }
    ~S() { alloc.deallocate(this->val, size); cout << "Destructor called" << endl; } //val && this->val
//===========================================================
    T& operator=(T&);
    istream& operator>> (istream&);
    T& operator[](unsigned int);
    const T& operator[](const unsigned int) const;
    T& get_val();
    void set_val(const T&);
    void read_val (T&);
//===========================================================
    void reserve(const unsigned int);
    void resize(const unsigned int);
    void push_back(const T&);
//===========================================================
};
Сам класс S должен уметь хранить в себе кучу объектов, причем некоторые объекты сами являются контейнерами.
Например, есть код:

C++
1
2
    S<string> s_string(3);
    S<vector <int> > s_vectors(4);
Само собой, я перегрузил оператор индексации, чтобы я мог получать нужный мне объект из моей структуры.
Но проблема вот в чём, при обращении к индексу моего класса, оператор индексации выводит не объект-контейнер, а объект в контейнере.
Т.е. я получаю не сам вектор, а его элемент.

C++
1
2
3
4
5
6
7
template <class T, class A>
const T& S<T,A>::operator[](unsigned int i) const
{
    //if (i < 0) throw Range_error(i);
    //if (i > size) throw Range_error(i);
    return val[i];
}
Сам я новичок, подскажите пожалуйста, что можно придумать, чтобы на запрос s_strings[1], получать не 1 char из строки, а всю строку, которая располагается по этому адресу указателя?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru