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

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

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

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

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

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

Паттерн "Итератор" для шаблонного класса "Словарь" - C++
Препод дал задание сделать шаблонный словарь и реализовать для него иттератор. Сделал словарь, но как работать с иттератором я понятия не...

Error: значение типа "const char" нельзя присвоить сущности типа "double" - C++
#include <iostream> #include <iomanip>// using namespace std; void main(void) { const int k=5; int a=10; unsigned int...

Значение типа "void" нельзя использовать для инициализации сущности типа "int" - C++
Не понимаю, почему компилятор считает, что s.pop() это значение типа "void".. он же вернет этот удаляемый элемент? Как исправить? void...

Значение типа "char *" нельзя присвоить сущности типа "LPWSTR" - C++
как исправить эту ошибку значение типа "char *" нельзя присвоить сущности типа "LPWSTR"

Ошибка аргумент типа "char" несовместим с параметром типа "LPCSTR" - C++
char result; result=printf("%d %d", "test.php?id=",id); HINTERNET hHttpRequest = HttpOpenRequest( hHttpSession, "GET", result,...

Значение типа "char *" нельзя присвоить сущности типа "LPWSTR" - C++
значение типа "char *" нельзя присвоить сущности типа "LPWSTR" void AddColToListView(char *st, int sub, int size) { ...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
alex_x_x
бжни
2447 / 1652 / 84
Регистрация: 14.05.2009
Сообщений: 7,162
11.05.2012, 23:41 #2
Цитата Сообщение от IcyWind Посмотреть сообщение
Единственное решение, которое могу придумать - это шаблонный класс.
скорее всего
Цитата Сообщение от IcyWind Посмотреть сообщение
Но мне, в принципе, хватило бы просто "общего" описания итератора.
с++ не си и тут общего просто так не прокатит
наследованием эти контейнеры не связаны, поэтому строгая типизация без шаблонов вам не позволит просто так это сделать

ну и естественный вопрос - а зачем оно нужно?)
0
IcyWind
8 / 8 / 2
Регистрация: 19.09.2011
Сообщений: 269
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 в выпадающем списке не показывает конструктор!!!
    {
    }
0
IFree Host
Заблокирован
11.05.2012, 23:50 #4
Цитата Сообщение от alex_x_x Посмотреть сообщение
ну и естественный вопрос - а зачем оно нужно?)
Что то у меня такой же вопрос возник
0
alex_x_x
бжни
2447 / 1652 / 84
Регистрация: 14.05.2009
Сообщений: 7,162
11.05.2012, 23:54 #5
IcyWind, какойнибудь небольшой кусок кода, который можно скомпилировать, приведите
0
IcyWind
8 / 8 / 2
Регистрация: 19.09.2011
Сообщений: 269
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)
    {
    }
0
DU
1483 / 1059 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
12.05.2012, 00:03 #7
#include <vector> - это должно быть в h файле сортировщика.
в h файле везде перед vector написать std::
шаблонную функцию нужно реализовать в h файле.
ну и еще ошибки компиляции в студию!
0
alex_x_x
бжни
2447 / 1652 / 84
Регистрация: 14.05.2009
Сообщений: 7,162
12.05.2012, 00:07 #8
Цитата Сообщение от IcyWind Посмотреть сообщение
template<typename T> // нужно указывать и в .cpp и в .h?
шаблоны описывают только в h

Добавлено через 1 минуту
Цитата Сообщение от IcyWind Посмотреть сообщение
long end;
Цитата Сообщение от IcyWind Посмотреть сообщение
vector<int>::iterator end;
плохая идея
0
IcyWind
8 / 8 / 2
Регистрация: 19.09.2011
Сообщений: 269
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)
Интересует не только результат, но и скорость работы и т.д.
0
alex_x_x
бжни
2447 / 1652 / 84
Регистрация: 14.05.2009
Сообщений: 7,162
12.05.2012, 00:30 #10
Цитата Сообщение от IcyWind Посмотреть сообщение
v1.swap(v2);
логика за то, что этот вариант быстрее
0
diagon
Higher
1929 / 1195 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
12.05.2012, 11:38 #11
Цитата Сообщение от alex_x_x Посмотреть сообщение
логика за то, что этот вариант быстрее
По идее std::swap(...,...) должен быть специализирован для векторов, поэтому разницы быть не должно.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.05.2012, 11:38
Привет! Вот еще темы с ответами:

Аргумент типа "const char*" несовместим с параметром типа "LPCWSTR" - C++
хочу запустить paint с visual studio но выдает ошибку под словами open, filename, строка 6#include &lt;iostream&gt; #include &lt;windows.h&gt; ...

В зависимости от времени года "весна", "лето", "осень", "зима" определить погоду "тепло", "жарко", "холодно", "очень холодно" - C++
В зависимости от времени года &quot;весна&quot;, &quot;лето&quot;, &quot;осень&quot;, &quot;зима&quot; определить погоду &quot;тепло&quot;, &quot;жарко&quot;, &quot;холодно&quot;, &quot;очень холодно&quot;. Я так...

Работа с памятью: можно ли в массив объектов с полем типа "Родитель", вписать объекты с полем типа "Потомок" - C++
Здравствуйте. Предположим, что у нас есть массив из структур в которых находиться класс Item и число Count. Можно ли на место Item записать...

Аргумент типа "char *" несовместим с параметром типа "LPCWSTR" - C++
Что такое и с чем его едят 1 IntelliSense: аргумент типа &quot;char *&quot; несовместим с параметром типа...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
12.05.2012, 11:38
Ответ Создать тему
Опции темы

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