navody:cpp
Obsah
C++
Instalace překladače fedora
yum install gcc-c++
Překlad
přeloží soubor.cpp
na soubor.o
s podporou ISO C++ standardu a dalšími parametry
g++ -Wall -Wextra -std=c++0x -pedantic -c <soubor.cpp>
vytvoří spustitelný soubor ze souborů *.o
g++ -Wall -Wextra -std=c++0x -pedantic <soubory *.o> -o <spustitelný soubor>
další parametry
-g3
- ladící informace pro debugování-O3
- optimalizace
linkování knihoven
-lm
- knihovnacmath
-pthread
- knihovna pro podporu vláken
Příklady kódu
exception
ukázka použití výjimek
#include <iostream> #include <stdexcept> using namespace std; int main () { try { throw runtime_error("nějaká chyba"); } catch (runtime_error &e) { cerr << e.what() << endl; return EXIT_FAILURE; } return EXIT_SUCCESS; }
socket
ukázka TCP serveru, který obslouží každého clienta v samostatném vlákně
#include <string> #include <iostream> #include <sys/socket.h> #include <netinet/in.h> #define PORT 8000 #define BUFFER_SIZE 1024 using namespace std; /** * enum for actions */ enum e_actions { E_SOCKET, E_SOCKET_NAME, E_QUEUE, E_CLIENT, E_THREAD }; /** * function receive message from client */ string receive_message(int client) { char buffer[BUFFER_SIZE] = {0}; string message = ""; if(recv(client, &buffer, BUFFER_SIZE-1, 0)) // parse header { message = buffer; } return message; } /** * function for serving of client */ void *serve_client(void *param) { int client = *((int *) param); cout << receive_message(client) << endl; return NULL; } /** * run server */ void run() { int s = -1; // number of socket // creat socket if ((s = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP)) < 0) { throw E_SOCKET; } sockaddr_in sock_name; sockaddr_in client_info; socklen_t addr_len; sock_name.sin_family = AF_INET; sock_name.sin_port = htons(PORT); sock_name.sin_addr.s_addr = INADDR_ANY; // asign socket name if (bind(s, (sockaddr *)&sock_name, sizeof(sock_name)) == -1) { throw E_SOCKET_NAME; } // create queue if (listen(s, 0) == -1) { throw E_QUEUE; } addr_len = sizeof(client_info); while(true) { int client_num = accept(s, (sockaddr*)&client_info, &addr_len); if (client_num == -1) { throw E_CLIENT; } else { pthread_t thr; pthread_attr_t attr; pthread_attr_init(&attr); pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED); if(pthread_create(&thr, &attr, serve_client, (void *) &client_num)) { throw E_THREAD; } pthread_attr_destroy(&attr); } } } /** * main function */ int main(int argc, char **argv) { try { run(); } catch (int e) { cerr << "Error number: " << e << endl; return EXIT_FAILURE; } return EXIT_SUCCESS; }
stream
přečte text ze souboru, který je předán jako první argument
#include <iostream> #include <fstream> #include <sstream> using namespace std; int main(int argc, char **argv) { if(argc != 2) { cerr << "Chyba v argumentech!" << endl; return EXIT_FAILURE; } ifstream file(argv[1]); if (!file) { cerr << "Soubor nelze otevřít!" << std::endl; return EXIT_FAILURE; } stringstream buffer; buffer << file.rdbuf(); file.close(); return EXIT_SUCCESS; }
zapíše text do souboru
#include <string> #include <iostream> #include <fstream> using namespace std; ofstream output("<soubor>"); if (!output) { cerr << "Do souboru nelze zapsat!" << endl; } else { string text = "nějaký text"; output << text; output.close(); }
vector
aritmetický průmer z hodnot vektoru
#include <vector> #include <numeric> using namespace std; vector<double> values = {0.1, 0.5, 0.8}; double avg = accumulate(values.begin(), values.end(), 0.0)/values.size();
iterator vektoru
#include <vector> #include <iostream> using namespace std; vector<int> values = {5, 3, 8}; for (vector<int>::iterator it = values.begin(); it!=values.end(); ++it) { cout << *it << endl; }
přidá na konec prvního vektoru druhý vektor
#include <vector> using namespace std; vector<int> vector1 = {1, 2, 3}; vector<int> vector2 = {4, 5, 6}; vector1.insert(vector1.end(), vector2.begin(), vector2.end());
funkce, která rozhodne, jestli vector v
obsahuje číslo x
#include <algorithm> #include <vector> using namespace std; bool contain_number(vector<int> &v, int x) { return (find(v.begin(), v.end(), x) != v.end()); }
navody/cpp.txt · Poslední úprava: 2013/03/19 21:32 autor: jules