Контејнерите претставуваат структури на податоци во кои може да се чуваат разни информации. Сите контејнери кои се дел од Стандардната библиотека на шаблони се имплементирани како параметаризирани структури. Ова значи дека еден контејнер може да служи за чување на податоци од кој било тип (int, float, double, string, vector<int>, vector<float>, vector<vector<float> >, итн).
За да може да користиме контејнер вектор, потребно е да ја вклучиме датотеката во која е тој дефиниран - наредба #include <vector>.
Алгоритмите служат за вршење на операции врз податоци (подредување, пронаоѓање на најголема вредност, итн.). Потребно е вклучување на соодветната датотека во која е дефинирана функцијата која ќе се користи (#include <algorithm>)
Контејнери
Вектори
Векторите во C ++ се динамички низи што се користат за складирање на податоци. За разлика од низите, кои се користат за складирање на последователни податоци и имаат статична природа, векторите обезбедуваат поголема флексибилност на програмата - можат автоматски да ја менуваат големината кога некој елемент се вметнува или брише.
vector< object_type > variable_name;
push_back - додавање елемент на крај на вектор
a.push_back(13);
ime_na_ vector .size - одредување големина на вектор / број на елементи
vector < int > b={10,20,30,40,50};
cout << "Vektorot ima " << b.size() << " elemenati" << endl;
ime_na_ vector .front - прв елемент на вектор vector < int > grupa={"Mira","Pero","Goran","Natasa"};
cout << "Prv vo grupata e " << grupa.front() << endl;
output: Mira
ime_na_ vector .back - пoследен елемент на вектор
cout << "Posleden vo grupata e " << grupa.back() << endl;
output: Natasa
ime_na_ vector .pop_back - бришење на последниот елемент во векторот
temperature.pop_back();
output:23.2, 25.8, 11, 15.3
ime_na_ vector .erase - бришење на елемент на одредена позиција во векторот
c.erase(c.begin() + 1); //go brise elementot na pozicija 1 vo vektorot
ime_na_ vector .clear - бришење на сите елементи
c.clear();//brisenje na site elementi vo vektorot, posle ova toj e prazen
Mножествата се тип на асоцијативен контејнер во кој секој елемент треба да биде единствен (уникатен). Вредностите се зачувуваат по специфичен подреден редослед, т.е. растечки или опаѓачки.
Покрај set, постои и контејнер (multiset) кој овозможува чување и на неуникатни вредности (вредности кои може да се повторуваат). Овој контејнер (multiset) ги има истите карактеристики како и обичните множества.
Синтакса
set <data_type> set_name;
Пример
set<int> val; // defining an empty set#include <set>
using namespace std;
int main()
{
//SET
set<int> s;
for (int i=0; i<10; i++)
s.insert(i);
cout << s.size() << endl; //pechati '10'
for (int i=0; i<5; i++)
s.insert(i); //nema efekt
cout << s.size() << endl; //pechati '10'
s.erase(2);
s.erase(8);
cout << s.size() << endl; //pechati '8'
//MULTISET
multiset<int> ms;
for (int i=0; i<10; i++)
ms.insert(i);
cout << ms.size() << endl; //pechati '10'
for (int i=0; i<5; i++)
ms.insert(i);
cout << ms.size() << endl; //pechati '15'
ms.erase(2); //se brishat dvete 2-ki
ms.erase(8);
cout<<ms.size() << endl; //pechati '12'
return 0;
}
erase - бришење на сите елементи со одредена вредност
size - големина (број на елементи) во едно множество
Доколку треба да ги изминеме сите елементи еден по еден (и да ги отпечатиме на екран), тоа може да го направиме со користење на итератори - движејќи се од почетокот (container.begin()) до крајот (container.end()) на множеството.
#include <iostream>
#include <set>
using namespace std;
int main()
{
//SET
set<int> s;
for (int i=0; i<10; i++)
s.insert(i);
if (s.find(5) != s.end())
cout << "DOBIVKA " << endl; //pechati 'DOBIVKA'
cout << s.count(2) << endl; //pechati '1'
s.erase(2);
cout << s.count(2) << endl; //pechati '0'
set<int>::iterator it = s.begin();
while (it != s.end())
{
cout << *it << " ";
it++;
}
cout << endl;
//pechati '0 1 3 4 5 6 7 8 9 '
//MULTISET
multiset<int> ms;
for (int i=0; i<10; i++)
ms.insert(i);
for (int i=0; i<5; i++)
ms.insert(i);
cout << ms.count(2) << endl; //pechati '2'
//izbrishi edna 2-ka
ms.erase(ms.find(2));
cout << ms.count(2) << endl; //pechati '1'
//izbrishi gi site elementi pomegju 5 i 8 (bez 8)
ms.erase(ms.find(5), ms.find(8));
return 0;
}
Output:
DOBIVKA
1
0
0 1 3 4 5 6 7 8 9
2
1
Пример
#include<iostream>
#include<set>
using namespace std;
int main(){
set<int> s = {10, 12, 15, 6};
set<int> :: iterator it;
cout<<"First element is:"<<*(s.begin()); // begin()
cout<<"\nLast element is:"<<*--(s.end())<<endl; // end()
// Traversal()
for (auto it = s.begin(); it!=s.end(); it++)
{ cout<<" "<<*it; }
cout<<endl;
if(s.empty()) // empty()
cout<<"Empty";
else
cout<<"Not empty";
cout<<"\nSize of the set: "<<s.size(); // size()
cout<<"\nMax Size: "<<s.max_size(); //max_size()
s.erase(s.begin()); // erase(iterator)
s.erase(12); // erase(n)
cout<<"\nAfter removing the first element and the element 12: ";
for (auto it = s.begin(); it!=s.end(); it++)
{ cout<<" "<<*it; }
s.insert(5); // insert(n)
cout<<"\nAfter inserting the new element 5: ";
for (auto it = s.begin(); it!=s.end(); it++)
{ cout<<" "<<*it; }
if(s.count(15)==1)
cout<<endl<<"15 is present in the set";
else
cout<<endl<<"15 i not present";
s.clear(); // clear()
if(s.empty())
cout<<"\nNow, the set is empty";
else
cout<<"\nSet is not empty";
return 0;
}
Output
First element is:6
Last element is:15
6 10 12 15
Not empty
Size of the set: 4
Max Size: 230584300921369395
After removing the first element and the element 12: 10 15
After inserting the new element 5: 5 10 15
15 is present in the set
Now, the set is empty
Mапа
// create a map with integer keys and string values
map<int, string> student = {{1,"Jacqueline"}, {2,"Blake"}, {3,"Denise"}};
using namespace std;
int main()
{
map<string, int> m;
m["prv"] = 2;
m["vtor"] = 5;
m["tret"] = 13;
m["tret"] = m["tret"] + 12;
cout<< (m["tret"])<<endl; //m["tret"] = 25
cout << m["prv"] << endl; //pechati '2'
cout << m["vtor"] << endl; //pechati '5'
cout << (m["prv"] + m["vtor"]) << endl; //pechati '7'
return 0;
}
Основни функции поврзани со мапа се:
Постојат два начини на пристап до елемент со одреден клуч:
Покажувачот е променлива што ја содржи мемориската адреса на променливата кон која покажува. Како и секоја променлива, покажувачот исто така има тип на податок кој е ист како типот на податоци на променливата чија меморија ја складира.
Синтакса за декларирање на покажувач во C++:
data_type* pointer_name
Илустрација покажувачи
#include <iostream>using namespace std;
{
int myVar = 10; // initialize a variable myVar
int* ptr = &myVar; // initialize a pointer ptr , pointing to myVar
// printing myVar will display 10
cout << "Value stored in myVar: " << myVar;
cout << "\n";
// printing *ptr will also display 10
cout << "Dereferenced pointer pointing to myVar: " << *ptr;
cout << "\n";
myVar++; // update the value of myVar
// now *ptr will print 11, since myVar has been updated
cout << "Dereferenced pointer pointing to myVar after updating myVar: ";
cout << *ptr;
cout << "\n\n";
return 0;
}
Итератори:
Итераторите се користат за укажување на мемориските адреси на контејнерите STL. Итератор е било кој објект кој покажувајќи на некој елемент од опсегот на елементи (може да е поле или контејнер), ја има способноста да ги измине сите елементи од опсегот
Покажувачите во C++ исто така може да укажуваат на функции, додека итераторите само служат за целта на извршување операции на контејнерите STL.
Итераторите овозможуваат движење низ елементите од еден контејнер, но и означување на групи податоци врз кои сакаме да вршиме одредени операции. Итераторите нудат слични можности како и покажувачите:- движење нанапред или наназад со помош на операторите ++ и --
- скокање нанапред или наназад со одреден чекор (v.begin() + 20, v.end() - 4)
- добивање на вредноста кон која покажува итераторот (*it)
- споредување со други итератори (!=, ==, <, <=, >, >=)
- одредување на растојанието (во број на елементи) помеѓу два итератори (користејќи го изразот it1 - it2, или преку повикување на методот distance)
Синтакса за декларирање итератор во C++:
<Container_Type> :: iterator name;
Container_Type: Овој параметар е типот на контејнер за кој е деклариран итераторот.
type_container :: iterator itr_name
Илустрација итератори
#include <iostream>using namespace std;
int main()
{
vector<int> v1 = { 10, 20, 30, 40 }; // initialize a vector
vector<int>::iterator itr; // declare an iterator
// access vector elements without iterator
cout << "Traversing without iterator : ";
for (int j = 0; j < 4; ++j) {
cout << v1[j] << " "; }
cout << "\n";
// access vector elements using an iterator
cout << "Traversing using iterator ";
for (itr = v1.begin(); itr != v1.end(); ++itr) {
cout << *itr << " "; }
cout << "\n\n";
// insert an element into the vector
v1.push_back(50);
// access vector elements without iterator
cout << "Traversing without iterator : ";
for (int j = 0; j < 5; ++j) {
cout << v1[j] << " "; }
cout << "\n";
// access vector elements using an iterator
cout << "Traversing using iterator ";
for (itr = v1.begin(); itr != v1.end(); ++itr) {
cout << *itr << " "; }
return 0;
}
#include <vector>
using namespace std;
int main()
{ vector <int> v;
for(unsigned i=0;i<15;i++)
v.push_back(i);
vector<int>::iterator it;
for(it=v.begin(); it!=v.end();it++)
cout << *it << ' ';
cout << endl;
return 0;
}
Output
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14
No comments:
Post a Comment