int ** ptrarr; -> wskaznik na wskaznik do int, przykład alokacja (10 wierszy):
ptrarr=new int *[10];
for (r=0;r<10;r++) ->w przeciwienstwie do zwykłej tablicy
ptrarr[r]=new int[kolumn]; -> jak widać każdy rząd morze mieć inną liczbę kolumn
dostęp:
ptrarr[r][c]=0;
Konwersja:
automatyczna(niejawna) lub jawna (rzutowanie)
L - Long
Konwersja typu C:
(int)k
Konwersja typu funkcyjnego: (działa także dla obiektów)
int(k)
Jeśli zmienne zmienno przecinkowe (float 7 znaków i double 15 znaków są bardzo duże lub małe
to również następuje strata dokładności)
Jeśli dodajemy zmienne różnej długości bitowej, najmniejsza zostanie zpromowana do największej
Stringi
#include<string> -> nie jest wbudowany więc trzeba dyrektywę
string nazwa="costam"; -> użyć "" bo ' ' sa dla literałów
albo
string nazwa("costam");
wiec
string nazwa2(nazwa); rownoznaczne z string nazwa2=nazwa;
można używać + żeby dodawać
cout << TheGood + " & " + TheBad << endl;
TheQuestion += "or not to be";
ale
String = "A" + "B"; NIE ZADZIAŁA, czyli zmienna + "cos tam"
wpisanie spacji z klawiatury:
string LineOfTypes;
cin >> LineOfTypes;
spowoduje że wczyta tylko pierwsze słowo
żeby wczytać cały wiersz GETLINE
getline(cin,LineOfTypes);
MOZNA porównywać stringi za pomocą ==
albo za pomocą: if(secret.compare(password) == 0)
FUNKCJE String:
Substring - bierze wycinek i tworzy nowy
str2 = str1.substr(1,2) 1- start 2 -długość
size i lenght
S.size();
find - znajduje string w innym stringu jak nie znajdzie zwraca string::npos
int where_it_begins = S.find(another_string, start_here);
Rozmiary:
cout << "length = " << s.length() << endl;
cout << "capacity = " << s.capacity() << endl;
cout << "max size = " << s.max_size() << endl;
Dodanie stringów (jak + )
string str1 = "content";
str2 = "appendix";
str1.append(str2); -> ale bardziej uniwersalny bo moze str1.append(str2,0,3);
Insert może wsadzic w srodek:
string quote = "to be ";
quote.append(quote);
quote.insert(6, "or not "); -> wsadzi or not od 6 znaku
Assign zastępuje string
string sky;
sky.assign(80,'*');
Replace zastępuje fragment innym
string ToDo = "I'll think about that in one hour";
string Schedule = "today yesterday tomorrow";
ToDo.replace(22, 12, Schedule, 16, 8);
Erase - zamazuje
WhereAreWe.erase(38, 8)
Swap - zamienia
Drink.swap(Needs);
Namespaces:
jeśli pominiesz
using namespace std;
to musisz:
std::cout <<...
możesz tworzyć swoje przestrzenie nazw w nich nazywać zmienne tak samo a potem do niech się odwoływać z użyciem :: albo otwierać i zamykać osobno przestrzen nazw przed wywołaniem
czyli najpierw określic namespace a potem otworzyć using namespaces
namespace Hogwarts {
int Troll = 1;
}
namespace Mordor {
int Troll = 2 ;
}
int main(void) {
{
using namespace Hogwarts;
cout << Troll << " " ;
}
{
using namespace Mordor;
cout << Troll << endl;
}
return 0;
}
ZADANIA
Zad1:
int main() {
short s = 1;
int i = 2;
long l = 3;
float f = 4.4;
double d = 6.6;
cout << s/float(i) + int(f)/i + long(d)/s;
return 0;
}
Wynik 8.5 bo
short s = 1;int i = 2;
cout << s/float(i);
da 0,5 (wynik we float)
operacja z int w całkowitych, long rzutowany na double zrobi operacje na long
Zad2:
int main() {
string s = "a";
cout << s << "b" + "c";
Błąd bo nie można "b" + "c"