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

Как достать объект-контейнер, а не его элемент - 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Введите количество элементов массива(<=50)"; cin>>k; cout<<"\nВведите "<<k<<" чисел"; http://www.cyberforum.ru/cpp-beginners/thread1203099.html
Районная олимпиада по программированию 2011-12 (ошибка!) C++
Похоже что я нашел ошибку помогите мне подтвердив ее или опровергнуть вот задача ! Для иллюстрации метода математической индукции в учебниках времен СССР всегда приводилась следующая задача: «Доказать, что любую целую сумму денег, начиная с 8 руб., Можно без сдачи разменять купюрами по 3 и 5 руб.». Вам не нужно ничего доказывать, а необходимо просто написать программу, которая для двух типов...
C++ Определитель матрицы. Символьный вид
Написать программу которая выводит формулу определитель матрицы в символьном виде для n-го случая. Есть код для нахождения диагоналей. Но в нем вроде не работает ss >> tstr; #include <iostream> #include <sstream> #define BASE 3 using namespace std; int main() {
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++ Копирование элементов из старой матрицы в новую. Динамическое распределение памяти Столкнулся с такой задачей : Вводится матрица. Если в матрице наибольший элемент находится над главной диагональю, то программа формирует новую матрицу, удалив из исходной столбец и строку, на пересечении которых находится наибольший элемент. Распределение памяти - динамическое. Вот мой код (MVS 2008): // vvod.cpp ФУНКЦИЯ ВВОДА #include <iostream> using namespace std; float*... подробнее

Показать сообщение отдельно
kordax
 Аватар для kordax
4 / 4 / 1
Регистрация: 08.06.2014
Сообщений: 89
08.06.2014, 23:07     Как достать объект-контейнер, а не его элемент
Добрый вечер всем.

Возник вопрос.
Я читал Страуструпа и на одной из его глав, есть упражнение по созданию класса-контейнера, в котором также есть контейнеры (например 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 из строки, а всю строку, которая располагается по этому адресу указателя?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 22:58. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru