Chirurgia cranio-cerebrală minim invazivă
Tehnicile minim invazive impun utilizarea unei tehnologii ultramoderne. Endoscoapele operatorii de diverse tipuri, microscopul operator dedicat, neuronavigația, neuroelectrofiziologia, tehnicile avansate de anestezie, chirurgia cu pacientul treaz reprezintă armamentarium fără de care neurochirurgia prin "gaura cheii" nu ar fi posibilă. Folosind tehnicile de mai sus, tratăm un spectru larg de patologii cranio-cerebrale. www.neurohope.ro |
Numere și cifre - din perspectiva C++
Last Updated: Sep 17 2014 21:58, Started by
dani.user
, Sep 17 2014 18:18
·
0
#1
Posted 17 September 2014 - 18:18
Multe probleme sunt legate de operații cu cifrele unui număr. Soluțiile apar, însa deseori se trântește un cod simplu dar repetitiv și care îngreunează urmărirea problemei (dacă-i mai complicată).
Dacă tot se cere o rezolvare în C++, hai să vedem cum ar arată o soluție cu adevărat C++ (11).
Spoiler
Da, să nu vă sperii am pus-o sub formă de spoiler. Înainte de analiza soluția, hai să vedem cât de ușor se folosește: int main() { Digitizer<int> x(456); cout << "x = " << x << endl; cout << "x has " << x.size() << " digits" << endl; cout << "x[0] = " << x[0] << endl; cout << "x digits: "; for (auto digit : x) { cout << digit << " "; } cout << endl; cout << "x digits (reverse): "; for (auto it = x.rbegin(); it != x.rend(); it++) { cout << *it << " "; } cout << endl; Digitizer<int, 2> xBinary = *x; cout << "x digits (binary) = "; for (auto digit : xBinary) { cout << digit; } cout << endl; Digitizer<int, 8> xOctal = *x; cout << "x digits (octal) = "; for (auto digit : xOctal) { cout << digit; } cout << endl; Digitizer<int, 16> xHexa = *x; cout << "x digits (Hexa) = "; for (auto digit : xHexa) { cout << digit; } cout << endl; cout << endl; Digitizer<int> y = x; cout << "y = " << y << endl; y[0] = 8; cout << "Changing y[0] to 8: " << y << endl; Digitizer<int, 2> yBinary = *y; cout << "y digits (binary) = "; for (auto digit : yBinary) { cout << digit; } cout << endl; cout << "Changing yBinary[2] to 1: "; yBinary[2] = 1; for (auto digit : yBinary) { cout << digit; } cout << endl; cout << endl; cout << "Sorting yBinary: "; sort(begin(yBinary), end(yBinary)); for (auto digit : yBinary) { cout << digit; } cout << " (" << yBinary << ")" << endl; return 0; } Quote
x = 456 x has 3 digits x[0] = 4 x digits: 4 5 6 x digits (reverse): 6 5 4 x digits (binary) = 111001000 x digits (octal) = 710 x digits (Hexa) = 1C8 y = 456 Changing y[0] to 8: 856 y digits (binary) = 1101011000 Changing yBinary[2] to 1: 1111011000 Sorting yBinary: 0000111111 (63) Soluția permite:
Aștept comentarii, sugestii și mai ales, ÎNTREBĂRI |
#2
Posted 17 September 2014 - 19:55
E bun de pus într-o bibliotecă .
1. Digit(Digit&& other) { swap(_value, other._value); }Aici și la supraîncărcarea lui ”=”, de ce se folosește Digit&& (sau Digitizer&&)? 2. ValueType operator*() const { return (ValueType)*this; }Nu prea înțeleg de ce îi facem cast lui *this la ValueType. (*this) nu e de tip Digit? Ar cam fi un conflict între tipuri. EDIT: Cumva când se execută return (ValueType)*thisatunci intervine supraîncărcarea de aici: operator const ValueType() const { return _value; } Edited by adrian93, 17 September 2014 - 19:57. |
#3
Posted 17 September 2014 - 21:58
1. Move Constructor
2. Da, ma folosesc de supraincarcarea precedenta. E cam ciudat sa am aceeasi supraincarcare si implicita si prin dereferentiere, dar am zis ca e mai natural de folosit asa. |
Anunturi
▶ 0 user(s) are reading this topic
0 members, 0 guests, 0 anonymous users