Fontosabb kulcsszavak, fogalmak
Standard Template Library (STL)
Generikus algoritmusok
Tárolók, tárolók műveletei
Sablonok
Virtuális alaposztály
Feladatok megoldásokkal
STL eszközök felhasználásával írjon programot, ami a szabványos bemenetről fájlvégig beolvasott szövegből karaktergyakoriságot számol!???
Egy lehetséges megoldás:
#include <iostream>
#include <string>
#include <vector>
#include <iterator>
#include <map>
#include <algorithm>
using namespace std;
// függvényobjektum a pair<char, int> kiírásához>
class StatOut {
std::ostream& os; // itt taroljuk a stream-et
public:
StatOut(std::ostream &os) :os(os) {}
void operator()(const pair<char, int>&p) {
os << p.first << ": " << p.second << std::endl; // minent külön sorba
}
};
int main() {
map<char, int> szamlalo; // itt tároljuk a statisztikát
char ch;
while (cin >> ch) { // olvasunk fájl végéig
if (isprint(ch)) // csak a látható karakterek érdekesek
szamlalo[ch] += 1;
}
cout << "Karakter gyakoriság:" << endl;
// Létrehozzuk a saját kiírás függvényobjektumát
StatOut out(cout);
// végigiterálunk a map-en
for_each(szamlalo.begin(), szamlalo.end(), out);
return 0;
Olvasson be komplex számokat a standard bemenetről egy std::vector -ba, majd tegye át az egységkörön belülieket egy másik vektorba, anélkül, hogy ciklust írnánk a bejárásra! Használjon minél több STL eszközt!???
Egy lehetséges megoldás:
#include <iostream>
#include <vector>
#include <complex>
#include <iterator>
#include <algorithm>
using namespace std;
// típusok, hogy átláthatóbb legyen
typedef complex<double> dbComlpex;
typedef vector<dbComlpex>::iterator vecIter;
// egységkörön kívül esők
bool kint(const dbComlpex &k) { return abs(k) >= 1; }
int main() {
dbComlpex k;
vector<dbComlpex> v1; // v1: összes szám, v0: körön belül
while (cin >> k) { // olvasunk fájl végéig
v1.push_back(k);
}
// v0-ba átmasolunk mindent
vector<dbComlpex> v0 = v1;
// töröljuk az egységkörön kívülieket
vecIter e = remove_if(v0.begin(), v0.end(), kint);
// lehet, hogy kevesebb lett, ezért a végét levágjuk
v0.erase(e, v0.end());
// kiírjuk
ostream_iterator<dbComlpex>out(cout, "\n");
copy(v0.begin(), v0.end(), out);
return 0;
Készítsen generikus függvényt, ami ugyanúgy használható, mint a std::unique() függvény!???
Egy lehetséges megoldás:
template <class Iterator, class BinPred>
Iterator unique (Iterator first, Iterator last, BinPred pred) {
Iterator result = first;
if (first == last) return last;
while (++first != last) {
if (!pred(*result, *first))
*(++result) = *first;
}
return ++result;
Valósítsa meg a grep X | sort -u Unix parancsot! A Szabványos bemenetről olvasson sorokat, dobja el az X-et nem tartalmazókat, rendezze a maradékot soronként, majd csak azokat a sorokat írja ki, amelyek különböznek a közvetlenül őket megelőzőtől! Az X paraméter a program első parancssori paramétere legyen. A kiíratáshoz használja az ostream iterátort!???
Egy lehetséges megoldás:
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
#include <iterator>
using namespace std;
int main (int argc, char *argv[]) {
if (argc <= 1) {
cout << "Hasznalat: " << argv[0] << " string" << endl;
return 1;
}
string line;
vector<string> tar;
// Sorok beolvasása
while (getline(cin, line)) {
if (line.find(argv[1]) != string::npos) // ha nem található a string
tar.push_back(line);
}
sort(tar.begin(), tar.end()); // rendezés
tar.erase(unique(tar.begin(), tar.end()), tar.end()); // uniq
ostream_iterator<string> out(cout, "\n"); // kiíráshoz
copy(tar.begin(), tar.end(), out); // kiírás
return 0;
Utolsó frissítés: 2018-04-25 15.20