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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 15, средняя оценка - 4.67
xadjek
36 / 36 / 4
Регистрация: 05.06.2011
Сообщений: 306
#1

Контейнеры и итераторы - C++

06.06.2011, 19:01. Просмотров 2108. Ответов 7
Метки нет (Все метки)

Здравствуйте. Нужна помощь в написании лабораторной работы
задание
1. Контейнеры. Создать контейнер, добавить в него следующий обьект: расклад карт для 1 руки (12 карт 4 мастей от 1 до Т)
Протестировать методы контейнера, скопировать его элементы в другой контейнер.

2. Итераторы. Протестировать работу итераторов различного типа., например, при вводе
и просмотре всех элементов контейнера, добавлении, поиске, удалении и пр.

3. Алгоритмы. Протестировать по 2 алгоритма каждой из 4 групп стандартной библиотеки алгоритмов. Указать, где используются стандартные объекты-функции (взять по 2 согласно вариантам). Обязательно использовать функциональный объект из п 1.
Контейнер-vector
обьекты функции: plus
Немодифицирующие алгоритмы:mismatch, count
Модифицирующие алгоритмы: remove_copy_if, rotate
Алгоритмы, связанные с сортировкой: sort_heap
Численные алгоритмы: adjacent_difference
из всего имеется свой написанный класс(сам расклад карт)
Код
#include "stdafx.h"
#include <iostream>
#include <string.h>
#include<vector>
#include<algorithm>
#include<iterator>
#include<set>
using namespace std;
class Rasclad
{
private:
	string S[2][6];
	int N;
public:
	Rasclad() {};
	~Rasclad() {};

	int Find(string str)
		 {
          for(int i=0;i<N;i++)
           {
            if(!strcmp(S[i],str))
            return i;
           }
           return -1;
         }
	   bool Add(char*str)
	      {
           if(N<20)
            {
            strcpy(S[N],str);
            N++;
            return true;
           }
          else return false;
         }
	   bool Del(char*str)
		{
          int k=Find(str);
	      cout<<k<<endl;
          if(k>=0)
           {
           for(int i=k+1;i<N;i++)
            strcpy(S[i-1],S[i]);
           N--;
          return true;
           }
          return false;
         }
	   void View()
         {
          for(int i=0;i<N;i++)
          cout<<S[i]<<endl;
         }
	   bool Filter()
		 {
		  int k=0;
		   for(int i=0;i<N;i++)
		   {
			 if((atoi(S[i])%2)==1)//преобразует строку, адресуемую параметром str, в значение типа int
			 {
			  cout<<S[i]<<endl;
			  k++;
			 return false;
			 }
			 else return true; 
		  }
	   int Sort(char*str);
		 { 
		   char*str;
		   for ( int i=0;i<N-1;i++)
		   for (int j=N-1;j>i;j--)
            { 
			 if(strlen(S[j])>strlen(S[j-1]))//возвращает в  байтах  длину  строки  string
				
				strcpy(str,S[j]);
				strcpy(S[j],S[j-1]);
				strcpy(S[j-1],str);
		    }
	     }

		  bool operator==(Rasclad T, Rasclad T2)
	  {if(N==T.N)
	  return true;
	  if(!N==T.N)
	  return false; };
	   bool operator<(Set T)
	 {
	  if(N<T.N)
	  return true;
	  else false;
	  };
	  
	  
	  char* operator[](int i)
	  { 
       return S[i];
	  };
	  
	  friend Set operator<<(Set,char*str)
	  {cout<<str<<"";};
	  bool operator>(Set T)
	 {
	  if(N>T.N)
	  return true;
	  else false;
	  };
	   };
буду весьма благодарен в оказании любой помощи
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.06.2011, 19:01     Контейнеры и итераторы
Посмотрите здесь:

Контейнеры и итераторы - C++
Тема: иерархия объектов и группа. Итераторы. Задание: Имена всех монархов на заданном континенте.

Двусвязный список контейнеры и итераторы - C++
#include &lt;iostream&gt; #include &lt;algorithm&gt; #include &lt;list&gt; using namespace std; class List { private: int...

STL. Итераторы и последовательные контейнеры - C++
Немогу решить эти задачки: 1 Написать экземпляр класса queue на основе элементов типа string. 2.Написаты программу, которая использует...

итераторы в list - C++
привет, подскажите как реализовать поиск c двумя циклами в списке: for (list &lt;Mc*&gt;::iterator i = myList.begin (); i != myList . end () -...

Итераторы и указатели - C++
читаю книгу по c++,вот дошел до темы указателей и итераторов в книге как то непонятно написано,объясните пожалуйста следующие вопросы ...

индексы и итераторы - C++
какая связь между индексами и итераторами. например, есть вектор. итератор р указывает на елемент со значением 5. как узнать индекс этого...

Потоковые итераторы - C++
Я новичок, прошел тему &quot;STL&quot; по учебнику Лафоре. Пишу в Code::Blocks, поставить другую IDE возможности мало. При попытке работы с...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
lemegeton
2923 / 1352 / 135
Регистрация: 29.11.2010
Сообщений: 2,725
07.06.2011, 01:22     Контейнеры и итераторы #2
Посмотрите вот этот топик: Списки, стеки, очереди
xadjek
36 / 36 / 4
Регистрация: 05.06.2011
Сообщений: 306
08.06.2011, 00:55  [ТС]     Контейнеры и итераторы #3
Возник еще один вопрос-написал код, но он не компилируется т.к. выдается куча ошибок которые я не могу понять как исправить
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
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
#include "stdafx.h"
#include <iostream>
#include <string.h>
#include <vector>
#include <algorithm>
#include <iterator>
using namespace std;
 
class Rasclad
{
char* S[2][6];
int N, M;
public:
Rasclad() {};
~Rasclad() {};
int Find(char* str)
{
for(int i=0;i<2;i++)
for(int j=0;j<6;j++)
{
if(!strcmp(S[i][j],str))
{return i;}
else {return -1;}
}
 
}
bool Add(char*str)
{
if(N<6)
{
strcpy(S[N][M],str);
N++;
M++;
return true;
}
else return false;
}
bool Del(char*str)
{int j;
int k=Find(str);
cout<<k<<endl;
if(k>=0)
{
for(int i=k+1;i<2;i++)
for(int j=k+1;j<6;j++)
strcpy(S[i-1][j-1],S[i][j]);
N--;
M--;
return true;
}
return false;
}
void View()
{
for(int i=0;i<2;i++)
for(int j=0;j<4;j++)
 
cout<<S[i][j]<<endl;
}
 
bool operator==(Rasclad T)
{
bool localResult = true;
bool result = true;
{for(int i=0;i<2;i++)
for(int j=0;j<6;j++)
{ char* tmp=T.getRasclad(i,j);
localResult = strcmp(tmp,S);
if(!localResult)
result = localResult;
}
}
}
bool operator>(Rasclad T)
{
if(N>T.N)
return true;
else 
{return false;}
}
char* getRasclad(int i,int j)
{
return S[i][j];
}
friend ostream &operator<<(ostream &stream, Rasclad obj)
{ for(int i=0;i<2;i++)
for(int j=0;j<6;j++)
{stream<<obj[i][j];}
}
};
 
int main()
{
vector<Rasclad>cont;//создание вектора нулевой длинны
vector<Rasclad>cont2;
unsigned int i,j;
cout<<"Container size"<<cont.size()<<endl;
vector<Rasclad>::iterator p=cont.begin();
for(i=0;i<2;i++)
{for(j=0;j<cont.size();j++)
{
Rasclad* tmp = new Rasclad();   
    cont.insert(p,tmp);
}
}
 
cont2.insert(cont.begin(),cont.end());
for(i=0;i<cont.size();i++)
{for(j=0;j<cont.size();j++);//отобрaжаем содержимое множества
cout<<cont[i][j]<<endl;
}
for(int i=0;i<cont.size();i++)
for(j=0;j<cont.size();j++)
cont[i][j]=cont[i][j]+cont2[i][j];//изменяем содержимое множества
cout<<"content doubled:\n"<<endl;
cout<<cont[i][j]<<endl;
 
char*s[2][6];
vector<Rasclad>::iterator p;
p= cont.begin();
while(p!=cont.end())
{
cout<<*p;
p++;
}
 
char*S[2][6];
vector<Rasclad>::iterator p=cont.begin();
p+=2;//указатель на 3-й элемент
cont.insert(p,4,S[1][3]);//вставляем 10 символов
cout<<"size of the vector after insert="<<cont.size()<<endl;
cout<<"content of the vector after insert:\n";
for(int i=0;i<cont.size();i++)
{for(int j=0;j<cont.size();j++)
{cout<<cont[i][j];}
}
p= cont.begin();
p+=2;
cont.erase(p,p+5);//удаление 5 элементов подряд
cout<<"size of the vector after insert"<<cont.size()<<endl;
т.е. то и есть та программа из шапки, но уже которую я начал писать потихоньку но пока неудачно(
lemegeton
2923 / 1352 / 135
Регистрация: 29.11.2010
Сообщений: 2,725
08.06.2011, 12:15     Контейнеры и итераторы #4
Цитата Сообщение от xadjek Посмотреть сообщение
Создать контейнер,
Контейнер надо свой написать или использовать STL контейнер?

Цитата Сообщение от xadjek Посмотреть сообщение
12 карт 4 мастей от 1 до Т
Эээ... 2,3,4,5,6,7,8,9,10,В,Д,К,Т -- тринадцать (не 12) карт. Какую-то надо выбросить?

И дальше по заданию непонятно, где надо использовать свой самописный контейнер, а где -- STL контейнеры.

Если надо создать свой контейнер для хранения набора карт (выборка N из 52), я бы предложил создать контейнер-множество. Причем его совершенно не обязательно строить на базе дерева, это может быть просто массив из 7 байт, где каждый бит обозначает соответствующую карту. (7*8 = 56 бит, а карт всего 52, так что хватит и еще останется).
xadjek
36 / 36 / 4
Регистрация: 05.06.2011
Сообщений: 306
08.06.2011, 15:57  [ТС]     Контейнеры и итераторы #5
Цитата Сообщение от lemegeton Посмотреть сообщение
Контейнер надо свой написать или использовать STL контейнер?


Эээ... 2,3,4,5,6,7,8,9,10,В,Д,К,Т -- тринадцать (не 12) карт. Какую-то надо выбросить?

И дальше по заданию непонятно, где надо использовать свой самописный контейнер, а где -- STL контейнеры.

Если надо создать свой контейнер для хранения набора карт (выборка N из 52), я бы предложил создать контейнер-множество. Причем его совершенно не обязательно строить на базе дерева, это может быть просто массив из 7 байт, где каждый бит обозначает соответствующую карту. (7*8 = 56 бит, а карт всего 52, так что хватит и еще останется).
1. надо использовать STL контейнер
причины использования 12 карт проста-там обьявлен массив 2х6, т.е. получить таким образом 13 карт даже обьявив другой массив мы не можем
причина использования вектора в виде контйнера обуславливается тем что по варианту задания так надо, но если реализовать через множество(выполнить чужой вариант) думаю проблем с преподом не будет все равно...
xadjek
36 / 36 / 4
Регистрация: 05.06.2011
Сообщений: 306
12.06.2011, 22:07  [ТС]     Контейнеры и итераторы #6
в общем код почти дописан но возник такой вопрос, вот например идет работа с одним и тем же контейнером
C++
1
2
3
4
5
6
7
8
9
10
11
12
cout<<"Randomnaya sortirovka"<<endl;
random_shuffle(cont.begin(),cont.end());//рандомная сортировка, модифицирующий алгоритм #2
for_each(cont.begin(),cont.end(),show);
 
cout<<"sort_heap"<<endl;
sort_heap (cont.begin(),cont.end());//сортировка кучи #1
p= cont.begin();
while(p!=cont.end())
{
cout<<*p;
p++;
}
вот тут продемонстрировано 2 алгоритма работающих с контейнером cont
вопрос-нужно ли после каждого действия алгоритма писать return 0? т.к. после действия алгоритма контейнер(содержимое) то изменяется а мне нужен изначальное содержимое перед каждым новым алгоритмом...
sandye51
программист С++
682 / 584 / 39
Регистрация: 19.12.2010
Сообщений: 2,016
12.06.2011, 22:18     Контейнеры и итераторы #7
Оо передавай в отдельные функции этот контейнер по значению. Тогда он будет один и никаких модификаций.
а каждая фукнция - демонстрация какого-либо алгоритма
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.06.2011, 22:26     Контейнеры и итераторы
Еще ссылки по теме:

векторы и итераторы - C++
void delete_duplicate_neiron(vector&lt;vector &lt;SNeiron&gt; ::iterator &gt;nw) // контейнер имеет 8 значений { for (unsigned int i = 0; i &lt;...

Итераторы и стеки - C++
Вот условие: Задано целое число. Записать все десятичные цифры этого числа в стек. Переписать элементы в новый стек удалив все цифры...

Поточные итераторы - C++
Доброго всем времени суток. У Б. Страуструпа в книге, там где &quot;Итераторы потоков &quot; есть пример, в котором реализуется программа, которая...

итераторы вектора - C++
#include &lt;tchar.h&gt; #include &lt;iostream&gt; #include &lt;vector&gt; using namespace std; int _tmain(int argc, _TCHAR* argv) { vector...

Сортировка и итераторы - C++
Помогите пожалуйста разобраться в функции &quot;sortByMarksCoeff&quot;. Реализации ее действий. Еще не имел дело с итераторами и библиотекой...


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

Или воспользуйтесь поиском по форуму:
xadjek
36 / 36 / 4
Регистрация: 05.06.2011
Сообщений: 306
12.06.2011, 22:26  [ТС]     Контейнеры и итераторы #8
а можно на данном примере показать? а то я что-то не сильно понял...
Yandex
Объявления
12.06.2011, 22:26     Контейнеры и итераторы
Ответ Создать тему
Опции темы

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