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

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

Войти
Регистрация
Восстановить пароль
 
4iFF
19 / 19 / 1
Регистрация: 06.07.2012
Сообщений: 88
#1

Итераторы, как аргументы функции - C++

19.08.2012, 00:04. Просмотров 444. Ответов 4
Метки нет (Все метки)

Код:
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
#include <iostream>
using std::cout;
using std::cin;
using std::endl;
 
#include <string>
using std::string;
 
void setPrintIter(string::const_iterator, string);
string::const_iterator getPrintIter(string::const_iterator, string);
 
int main(){
    string string1;
 
    cout << "Enter string:";
    getline(cin,string1);
 
    string::const_iterator iter = string1.end() - 1;//т.к. string1.end() символ за последним
 
    /*
    for (;;){
        cout << *iter;
        if (iter == string1.begin())   //рабочее (не рекурсивное) решение 
            break;
        iter--;
    }*/
 
    cout << *getPrintIter(iter,string1) << endl;
    setPrintIter(iter,string1);
 
    return 0;
}
 
void setPrintIter(string::const_iterator it, string str){
    if (it == str.begin())
        cout << *it;
    else{
        cout << *it;
        setPrintIter(it--,str);
    }
}
 
string::const_iterator getPrintIter(string::const_iterator it, string str){
    if (it == str.begin())
        return it;
    else
        return getPrintIter(it--,str);
}
Задача:
вывести строку в обратном порядке, используя итераторы,не рекурсивно и рекурсивно.
Проблема:
Не рекурсивный метод я написал, а вот set и get рекурсивные варианты не работают и во время выполнения программы выдает 2 ошибки (одинаковы при вызовах set и get функций):
1)string iterators incompitible (во время написания не рекурсивного варианта заметил что это выдает когда итерат выходит за предел)
2)"Standart C++ Libraries Invalid Argument" && 0 (неужели функции не могут иметь в качестве аргументов итераты?!)
Вопрос:
В чем тут ошибка\ки?Могут ли функции иметь в качестве аргументов итераты?

Заранее спасибо за ответы.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.08.2012, 00:04
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Итераторы, как аргументы функции (C++):

Как правильно определить тип функции и ее аргументы? - C++
По заданию нужно вынести каждое действие в функции, у меня с ними не лады (:wall:) Вот приведу пример моей первой функции TCHAR...

Как на это код добавить аргументы функции main? - C++
#include &lt;iostream&gt; #include &lt;fstream&gt; #include &lt;iomanip&gt; #include &lt;cstdio&gt; #include &lt;Windows.h&gt; using namespace std; int...

Как задать параметры запуска (аргументы командной строки) функции main? - C++
Как их задать в процессе запуска? т.е. пользователь запускает приложение и указывает параметры запуска при этом. Где про них почитать...

Итераторы в шаблонной функции - C++
Здравствуйте, пишу программу, в ознакомительных целях с шаблонными функциями. У меня есть функция, вычисляющая среднее арифметическое. Как...

Аргументы функции: что значит "большие" и "небольшие" аргументы? - C++
Здравствуйте! Всем доброго дня! Растолкуйте пожалуйста! Что значит большие и небольшие?

For_each и аргументы callback-функции; Как передать callback'у больше одного аргумента - C++
Изучаю контейнеры и алгоритмы stl по Майерсу . С непривычки слегка охренел и запутался в них . В общем есть у меня простой вызов...

4
Avazart
Нарушитель
Эксперт С++
7232 / 5404 / 293
Регистрация: 10.12.2010
Сообщений: 23,951
Записей в блоге: 17
19.08.2012, 00:29 #2
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
//---------------------------------------------------------------------------
template <class Iter>
void print(Iter first,Iter last)
{
 while(first != last)
  {
    std::cout<< *first<<" ";
    ++first;
  }
}
//---------------------------------------------------------------------------
int _tmain(int argc, _TCHAR* argv[])
{
system("chcp 1251");
using namespace std;
 
int a[]={1,2,3,4,5} ;
vector<int> va(a,a+5);
 
print(va.rbegin(),va.rend() ); cout<<endl;
 
system("pause");
return 0;
}
//---------------------------------------------------------------------------
Если писать то думаю в стиле алгоритмов
0
Mиxaил
533 / 438 / 37
Регистрация: 10.12.2009
Сообщений: 1,857
19.08.2012, 00:45 #3
Рекурсивно, в обратном порядке, в стиле алгоритмов STL:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
#include <string>
 
template < class ForwardIterator >
void recursivePrint( ForwardIterator first, ForwardIterator last )
{
    if ( first != last )
    {
        std::cout << *last;
        recursivePrint( first, --last );
    }
}
 
int main( int argc, char **argv )
{
    std::string str( "This is string!" );
    recursivePrint( str.begin(), str.end() - 1 );
    return 0;
}
1
Avazart
Нарушитель
Эксперт С++
7232 / 5404 / 293
Регистрация: 10.12.2010
Сообщений: 23,951
Записей в блоге: 17
19.08.2012, 00:49 #4
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
//---------------------------------------------------------------------------
template <class Iter>
void reverse_print(Iter first,Iter last)
{
 --last;
 while(last >= first)
  {
    std::cout<< *last<<" ";
    --last;
  }
}
//---------------------------------------------------------------------------
template <class Iter>
void recurs_reverse_print(Iter first,Iter last)
{
 if(first!=last)
  {
   reverse_print(first+1,last);
   std::cout<< *first<<" ";
  }
}
//---------------------------------------------------------------------------
Ну это все извращения по сути...
0
4iFF
19 / 19 / 1
Регистрация: 06.07.2012
Сообщений: 88
19.08.2012, 12:24  [ТС] #5
C++
1
2
3
4
5
6
7
8
9
10
11
template < class ForwardIterator >
void recursivePrint( ForwardIterator first, ForwardIterator last )
{   
    if ( first == last )
       std::cout << *last;
    else  if ( first != last )
    {
        std::cout << *last;
        recursivePrint( first, --last );
    }
}
Mиxaил, только вот так, т.к. первый символ не выводит.
0
19.08.2012, 12:24
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.08.2012, 12:24
Привет! Вот еще темы с ответами:

Аргументы Функции - C++
Привет всем.Программа такова по заданному TXT файлу идет поиск строки и эта строка передается в качестве аргумента функции...

Аргументы функции - C++
Как правильно описать аргументы в некоторой функции void Func(int* a, int* b) { //... } Чтобы можно было вызывать её...

Аргументы функции - C++
Привет! Как поступить в следующей ситуации. for (int i = 0; i &lt; 16; i++) { func(str1, str2); .... } дело в том...

Аргументы функции - C++
Вопрос на счет аргументов функции в С++. есть такая функция: void Teleport(Player* pPlayer, float array) { int i = 0; ...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

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