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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
IcyWind
8 / 8 / 2
Регистрация: 19.09.2011
Сообщений: 268
#1

Итератор "общего" типа. - C++

11.05.2012, 23:22. Просмотров 533. Ответов 10
Метки нет (Все метки)

Хочу создать класс, который будет работать и итераторами на разные объекты (векторы, списки и т.д.)
Единственное решение, которое могу придумать - это шаблонный класс. Но мне, в принципе, хватило бы просто "общего" описания итератора.
Скажем опишу я поле своего класса как-то так:
C++
1
2
all_iterator begin;
all_iterator end;
и в конструкторе мне нужно будет в поля begin и end записать конкретные итераторы: списка, очереди, вектора, множества...
есть ли что-то похожее? или только шаблонный класс?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.05.2012, 23:22     Итератор "общего" типа.
Посмотрите здесь:

C++ Создание переменной типа "чар" из последовательности бит
visual studio 2012 - ошибка "переопределение типа" C++
C++ Однонаправленный список типа "Очередь". Поменять элементы местами
C++ Вывод выражения типа "float". Некорректное отображение
C++ Аргумент типа "HDC" несовместим с параметром типа const PAINTSTRUCT
Ошибка "конструкторы не разрешены для возвращаемого типа" C++
Максимальное и минимальное значение типа "long double" C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alex_x_x
бжни
 Аватар для alex_x_x
2441 / 1646 / 84
Регистрация: 14.05.2009
Сообщений: 7,163
11.05.2012, 23:41     Итератор "общего" типа. #2
Цитата Сообщение от IcyWind Посмотреть сообщение
Единственное решение, которое могу придумать - это шаблонный класс.
скорее всего
Цитата Сообщение от IcyWind Посмотреть сообщение
Но мне, в принципе, хватило бы просто "общего" описания итератора.
с++ не си и тут общего просто так не прокатит
наследованием эти контейнеры не связаны, поэтому строгая типизация без шаблонов вам не позволит просто так это сделать

ну и естественный вопрос - а зачем оно нужно?)
IcyWind
8 / 8 / 2
Регистрация: 19.09.2011
Сообщений: 268
11.05.2012, 23:47  [ТС]     Итератор "общего" типа. #3
Создаю иерархию классов-сортировщиков

Добавлено через 5 минут
Чтобы не создавать новую тему...
пока решил писать не шаблонно, а только для вектора
не пойму...что делаю не так:
Файл класс.h:
C++ (Qt)
1
2
3
4
5
6
7
8
9
class Sort_Basic
{
    long start;
    long end;
    long size;
    vector<int>::iterator begin; //ругается
    vector<int>::iterator end;  //ругается
public:
    Sort_Basic(vector<int>::iterator, vector<int>::iterator); //не ругается почему-то..
файл класс.сpp:
C++ (Qt)
1
2
3
4
5
6
7
8
#include "StdAfx.h"
#include "Sort_Basic.h"
#include <vector>
using namespace std;
 
Sort_Basic::Sort_Basic(vector<int>::iterator b,vector<int>::iterator e)//ОЧЕНЬ СИЛЬНО ругается - когда пишу sort_Basic:: -> VS2010 в выпадающем списке не показывает конструктор!!!
    {
    }
IFree Host
Заблокирован
11.05.2012, 23:50     Итератор "общего" типа. #4
Цитата Сообщение от alex_x_x Посмотреть сообщение
ну и естественный вопрос - а зачем оно нужно?)
Что то у меня такой же вопрос возник
alex_x_x
бжни
 Аватар для alex_x_x
2441 / 1646 / 84
Регистрация: 14.05.2009
Сообщений: 7,163
11.05.2012, 23:54     Итератор "общего" типа. #5
IcyWind, какойнибудь небольшой кусок кода, который можно скомпилировать, приведите
IcyWind
8 / 8 / 2
Регистрация: 19.09.2011
Сообщений: 268
11.05.2012, 23:55  [ТС]     Итератор "общего" типа. #6
Класс.h
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#pragma once
 
 
class Sort_Basic
{
    long start;
    long end;
    long size;
    vector<int>::iterator begin;
    vector<int>::iterator end;
public:
    Sort_Basic(vector<int>::iterator, vector<int>::iterator);
 
    //Sort_Basic(vector<int>::iterator,vector<int>::iterator,long);
 
template<typename T>
void IsSort(T, T);
 
virtual void Sort()=0;
 
virtual ~Sort_Basic(void);
 
    
};
Класс.cpp
C++ (Qt)
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
#include "StdAfx.h"
#include "Sort_Basic.h"
#include <vector>
using namespace std;
 
Sort_Basic::Sort_Basic(vector<int>::iterator b,vector<int>::iterator e)
    {
    }
 
template<typename T> // нужно указывать и в .cpp и в .h?
void Sort_Basic::IsSort(T b, T e)
    {
        --e;
        while (b!= e)
            {
                if (*b>*(++b))
                    cout<<"ВНИМАНИЕ! Последовательность неотсортирована!<===ERROR";
            }
        cout<<"Последовательность успешно отсортирована";
    }
 
 
Sort_Basic::~Sort_Basic(void)
    {
    }
DU
1479 / 1055 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
12.05.2012, 00:03     Итератор "общего" типа. #7
#include <vector> - это должно быть в h файле сортировщика.
в h файле везде перед vector написать std::
шаблонную функцию нужно реализовать в h файле.
ну и еще ошибки компиляции в студию!
alex_x_x
бжни
 Аватар для alex_x_x
2441 / 1646 / 84
Регистрация: 14.05.2009
Сообщений: 7,163
12.05.2012, 00:07     Итератор "общего" типа. #8
Цитата Сообщение от IcyWind Посмотреть сообщение
template<typename T> // нужно указывать и в .cpp и в .h?
шаблоны описывают только в h

Добавлено через 1 минуту
Цитата Сообщение от IcyWind Посмотреть сообщение
long end;
Цитата Сообщение от IcyWind Посмотреть сообщение
vector<int>::iterator end;
плохая идея
IcyWind
8 / 8 / 2
Регистрация: 19.09.2011
Сообщений: 268
12.05.2012, 00:26  [ТС]     Итератор "общего" типа. #9
Спасибки.
То есть все #include нужно пихать в .h файл?

Добавлено через 40 секунд
Цитата Сообщение от alex_x_x Посмотреть сообщение

Добавлено через 1 минуту


плохая идея
да, уже заметил
наверное, сплю уже))

Добавлено через 18 минут
C++ (Qt)
1
vector<int> v1,v2;
как-то их заполним
Есть ли разница между
C++ (Qt)
1
v1.swap(v2);
и
C++ (Qt)
1
swap(v1,v2)
Интересует не только результат, но и скорость работы и т.д.
alex_x_x
бжни
 Аватар для alex_x_x
2441 / 1646 / 84
Регистрация: 14.05.2009
Сообщений: 7,163
12.05.2012, 00:30     Итератор "общего" типа. #10
Цитата Сообщение от IcyWind Посмотреть сообщение
v1.swap(v2);
логика за то, что этот вариант быстрее
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.05.2012, 11:38     Итератор "общего" типа.
Еще ссылки по теме:

C++ Много ошибок типа "syntax error: identifier"
Ошибка: "C4430 отсутствует спецификатор типа - предполагается int..." C++
АТД "Однонаправленный список" с элементами типа char C++
C++ Как заполнить динамический массив типа "Класс"?

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

Или воспользуйтесь поиском по форуму:
diagon
Higher
 Аватар для diagon
1921 / 1187 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
12.05.2012, 11:38     Итератор "общего" типа. #11
Цитата Сообщение от alex_x_x Посмотреть сообщение
логика за то, что этот вариант быстрее
По идее std::swap(...,...) должен быть специализирован для векторов, поэтому разницы быть не должно.
Yandex
Объявления
12.05.2012, 11:38     Итератор "общего" типа.
Ответ Создать тему
Опции темы

Текущее время: 00:23. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru