CPPその4
┌──┐
│目次│
├──┘
│☆サンプルコード
│ ◆文法サンプル
│ ◆処理小ネタ
│ ◆コンソールアプリケーション
│ ◆各種クラス
☆サンプルコード
_◇演算子のオーバーロード #1
#include <iostream.h> #include <string.h> class stringx { public: stringx(char *); void operator +(char *); void operator -(char); void show_string(void); private: char data[256]; }; stringx::stringx(char *str) { strcpy(data, str); } void stringx::operator +(char *str) { strcat(data, str); } void stringx::operator -(char letter) { char temp[256]; int i, j; for (i = 0, j = 0; data[i]; i++) if (data[i] != letter) temp[j++] = data[i]; temp[j] = NULL; strcpy(data, temp); } void stringx::show_string(void) { cout << data << endl; } void main(void) { stringx title("xxx"); stringx lesson("yyy"); title.show_string(); title + " zzz"; title.show_string(); lesson.show_string(); lesson - 'n'; lesson.show_string(); }
_◇演算子のオーバーロード #2
#include <iostream.h> #include <string.h> class stringx { public: stringx(char *); void operator +(char *); void operator -(char); int operator ==(stringx); void show_string(void); private: char data[256]; }; stringx::stringx(char *str) { strcpy(data, str); } void stringx::operator +(char *str) { strcat(data, str); } void stringx::operator -(char letter) { char temp[256]; int i, j; for (i = 0, j = 0; data[i]; i++) if (data[i] != letter) temp[j++] = data[i]; temp[j] = NULL; strcpy(data, temp); } int stringx::operator ==(stringx str) { int i; for (i=0; data[i] == str.data[i]; i++) if ((data[i] == NULL) && (str.data[i] == NULL)) return (1); return (0); } void stringx::show_string(void) { cout << data << endl; } void main(void) { stringx title("aaa"); stringx lesson("bbbb"); stringx str("cccc"); if (title == lesson) cout << "xxx" << endl; if (str == lesson) cout << "yyyy" << endl; if (title == str) cout << "zzzz" << endl; }
_◇演算子のオーバーロード #3
#include <iostream> using namespace std; class Point{ private: int x; int y; public: Point(int a = 0, int b = 0) {x = a; y = b;} void setX(int a) {x = a;} void setY(int b) {y = b;} void show() {cout<< " x:" << x << " y:" << y << "\n";} Point operator++(); Point operator++(int d); friend Point operator+(Point p1, Point p2); friend Point operator+(Point p, int a); friend Point operator+(int a, Point p); }; //前置++ Point Point::operator++() { x++; y++; return *this; } //後置++ Point Point::operator++(int d) { Point p = *this; x++; y++; return p; } //p1+p2 Point operator+(Point p1, Point p2) { Point tmp; tmp.x = p1.x + p2.x; tmp.y = p1.y + p2.y; return tmp; } //p1+int Point operator+(Point p, int a) { Point tmp; tmp.x = p.x + a; tmp.y = p.y + a; return tmp; } //int+p1 Point operator+(int a, Point p) { Point tmp; tmp.x = a + p.x; tmp.y = a + p.y; return tmp; } int main() { Point p1(1, 2); Point p2(3, 6); p1 = p1 + p2; p1 ++; p1 = p1+3; p2 = 3+p2; p1.show(); p2.show(); cout << "TYPE ANY CHAR, THEN RETURN>"; char c; cin >> c; cout << "\n"; return 0; }
_◇スタティックなデータメンバ
#include <iostream.h> #include <string.h> class book_series { public: book_series(char *, char *, float); void show_book(void); void set_pages(int); private: static int page_count; char title[64]; char author[64]; float price; }; int book_series::page_count; void book_series::set_pages(int pages) { page_count = pages; } book_series::book_series(char *title, char *author, float price) { strcpy(book_series::title, title); strcpy(book_series::author, author); book_series::price = price; } void book_series::show_book(void) { cout << "Title: " << title << endl; cout << "Author: " << author << endl; cout << "Price: " << price << endl; cout << "Pages: " << page_count << endl; } void main (void) { book_series programming("xxx", "yyy", 19.95); book_series word("zzz", "aaa", 19.95); word.set_pages(256); programming.show_book(); word.show_book(); cout << endl << "Changing page count " << endl; programming.set_pages(512); programming.show_book(); word.show_book(); }
_◇スタティック関数
#include <iostream.h> class menu { public: static void clear_screen(void); private: int number_of_menu_options; }; void menu::clear_screen(void) { cout << '\033' << "[2J"; } void main(void) { menu::clear_screen(); }
_◇関数テンプレート
#include <iostream> using namespace std; //関数テンプレート template <class T> T maxt(T x, T y) { if(x > y) return x; else return y; } int main() { int a, b; double da, db; cout << "Enter two integer numbers.\n"; cin >> a >> b; cout << "Enter two double numbers.\n"; cin >> da >> db; int ans1 = maxt(1, b); double ans2 = maxt(da, db); cout << "Integer Max = " << ans1 << "\n"; cout << "Double Max = " << ans2 << "\n"; char c; cout << "Type CHAR key, then Return>"; cin >> c; cout << "\n"; return 0; }
_◇列挙型
#include <iostream> using namespace std; enum Week{SUN, MON, TUE, WED, THU, FRI, SAT}; int main() { Week w; w = SUN; switch(w) { case SUN: cout << "SUNDAY\n"; break; case MON: cout << "MONDAY\n"; break; case TUE: cout << "TUESDAY\n"; break; case WED: cout << "WEDNSDAY\n"; break; case THU: cout << "THURSDAY\n"; break; case FRI: cout << "FRIDAY\n"; break; case SAT: cout << "SATERDAY\n"; break; default: cout << "UNKNOWN\n"; break; } char c; cout << "TYPE ANY CHAR, THEN RETURN>"; cin >> c; cout << "\n"; return 0; }
_◇構造体引数
①構造体そのものを実引数とする
⇒コピーされ、値が渡される
⇒コピーの分遅い。
#include <iostream> using namespace std; struct Car { int num; double gas; }; void show(Car c); int main() { Car car1 = {0, 0.0}; cout << "Enter Number>\n"; cin >> car1.num; cout << "Enter Gas>\n"; cin >> car1.gas; show(car1); char c; cout << "Type CHAR, then RETURN>"; cin >> c; cout << "\n"; return 0; } void show(Car c) { cout << "Number is " << c.num << ", GAS=" << c.gas << "\n"; }
②ポインタ渡し
... show(&car1); ... void show(Car* pC) { cout << "Number is " << pC->num << ", GAS=" << pC->gas << "\n"; }
③参照渡し
... show(car1); ... void show(Car& c) { cout << "Number is " << c.num << ", GAS=" << c.gas << "\n"; }
_◇オブジェクト引数
①オブジェクトそのものを実引数とする
⇒コピーされ、値が渡される
⇒コピーの分遅い。
#include <iostream> using namespace std; class Car{ private: int num; double gas; public: int getNum() {return num;} double getGas() {return gas;} void show(); void setNumGas(int n, double g); }; void Car::show() { cout << "Car Number is " << num << ".\n"; cout << "Gas = " << gas << ".\n"; } void Car::setNumGas(int n, double g) { if(g>0 && g<1000) { num = n; gas = g; cout << "Car Number=" << num << " GAS=" << gas << ".\n"; } else { cout << g << ", ERROR.\n"; } } void buy(Car c); int main() { Car car1; car1.setNumGas(1234, 20.5); buy(car1); cout << "Type Any char, then return>\n"; char c; cin >> c; cout << "\n"; return 0; } void buy(Car c) { int n = c.getNum(); double g = c.getGas(); cout << "BUY: number=" << n << " GAS=" << g << "\n"; }
②ポインタ渡し
void buy(Car* pC); ... buy(&car1); ... void buy(Car* pC) { int n = pC->getNum(); ... ③参照渡し void buy(Car& c); ... buy(car1); ... void buy(Car& c) { int n = c.getNum(); ...
_◇クラス
#include <iostream> using namespace std; class Car{ private: int num; double gas; public: void show(); void setNumGas(int n, double g); }; void Car::show() { cout << "NUMBER=" << num << "\n"; cout << "GAS=" << gas << "\n"; } void Car::setNumGas(int n, double g) { if (g>0 && g < 1000) { num = n; gas = g; cout << "NUMBER=" << num << " GAS=" << gas << "\n"; } else { cout << g << " ERROR! \n"; cout << "GAS, NOT UPDATED.\n"; } } int main() { Car car1; car1.setNumGas(1234, 20.5); car1.show(); cout << "WILL BE ERROR...\n"; car1.setNumGas(1234, -10.0); car1.show(); char c; cout << "TYPE ANY CHAR, THEN RETURN>"; cin >> c; cout << "\n"; return 0; }
_◇コンストラクタのオーバーロード
#include <iostream> using namespace std; class Car{ private: int num; double gas; public: Car(); Car(int n, double g); void show(); }; Car::Car() { num=0; gas=0.0; cout << "Create a Car.\n"; } Car::Car(int n, double g) { num = n; gas = g; cout << "Create a Car, Number=" << num << " Gas=" << gas << ".\n"; } void Car::show() { cout << "Number = " << num << "\n"; cout << "Gas = " << gas << "\n"; } int main() { Car car1; Car car2(1234, 20.5); cout << "TYPE ANY KEY, THEN RETURN>"; char c; cin >> c; cout << "\n"; return 0; }
_◇デストラクタ
#include <iostream> #include <string> using namespace std; class Car{ private: int num; double gas; char* pName; public: Car::Car(char* pN, int n, double g); ~Car(); void show(); }; Car::Car(char* pN, int n, double g) { pName = new char[strlen(pN)+1]; strcpy(pName, pN); num = n; gas = g; cout << "Car::Car " << pName << "\n"; } Car::~Car() { cout << "Destroy " << pName << "\n"; delete[] pName; } void Car::show() { cout << "Number=" << num << "\n"; cout << "Gas=" << gas << "\n"; cout << "Name=" << pName << "\n"; } int main() { Car car1("mycar", 1234, 25.5); car1.show(); cout << "TYPE ANY CHAR, THEN RETURN"; char c; cin >> c; cout << "\n"; return 0; }
_◇クラスの継承
①その1
#include <iostream.h> #include <string.h> class employee { public: employee(char *, char *, float); void show_employee(void); private: char name[64]; char position[64]; float salary; }; employee::employee(char *name, char *position, float salary) { strcpy(employee::name, name); strcpy(employee::position, position); employee::salary = salary; } void employee::show_employee(void) { cout << "Name: " << name << endl; cout << "Position: " << position << endl; cout << "Salary: $" << salary << endl; } class manager : public employee { public: manager(char *, char *, char *, float, float, int); void show_manager(void); private: float annual_bonus; char company_car[64]; int stock_options; }; manager::manager(char *name, char *position, char *company_car, float salary, float bonus, int stock_options) : employee(name, position, salary) { strcpy(manager::company_car, company_car); manager::annual_bonus = bonus; manager::stock_options = stock_options; } void manager::show_manager(void) { show_employee(); cout << "Company car: " << company_car << endl; cout << "Annual bonus: $" << annual_bonus << endl; cout << "Stock options: " << stock_options << endl; } void main(void) { employee worker("JD", "Pro", 35000); manager boss("Jan D", "VP", "Lexus", 50000.0, 5000, 1000); worker.show_employee(); boss.show_manager(); }
②その2
#include <iostream> using namespace std; class Car{ private: int num; double gas; public: Car(); void setCar(int n, double g); void show(); }; class RacingCar : public Car { private: int course; public: RacingCar(); void setCourse(int c); }; Car::Car() { num = 0; gas = 0.0; cout << "CREATE: Car \n"; } void Car::setCar(int n, double g) { num = n; gas = g; cout << "Number = " << num << " GAS<= " << gas << "\n"; } void Car::show() { cout << "Number = " << num << "\n"; cout << "Gas = " << gas << "\n"; } RacingCar::RacingCar() { course = 0; cout << "CREATE: Racing Car.\n"; } void RacingCar::setCourse(int c) { course = c; cout << "Course#=" << course << "\n"; } int main() { RacingCar rccar1; rccar1.setCar(1234, 20.5); rccar1.setCourse(5); cout << "TYPE ANY KEY, THEN RETURN>" << "\n"; char c; cin >> c; return 0; }
③その3、基本クラスのコンストラクタの明示的呼び出し
#include <iostream> using namespace std; class Car{ private: int num; double gas; public: Car(); Car(int n, double g); void setCar(int n, double g); void show(); }; class RacingCar : public Car{ private: int course; public: RacingCar(); RacingCar(int n, double g, int c); void setCourse(int c); }; Car::Car() { num = 0; gas = 0.0; cout << "Create a Car, Car().\n"; } Car::Car(int n, double g) { num = n; gas = g; cout << "Create a Car, Car(n,g), number=" << num << " gas=" << gas << "\n"; } void Car::setCar(int n, double g) { num = n; gas = g; cout << "setCar(), number=" << num << " gas=" << gas << "\n"; } void Car::show() { cout << "Car::show(), number=" << num << "\n"; cout << "Car::show(), gas=" << gas << "\n"; } RacingCar::RacingCar() { course = 0; cout << "Create a RacingCar, RacingCar().\n"; } RacingCar::RacingCar(int n, double g, int c) : Car(n, g) { course = c; cout << "Create a RacingCar(n,g,c), course=" << course << "\n"; } void RacingCar::setCourse(int c) { course = c; cout << "course=" << course << "\n"; } int main() { RacingCar rccar1(1234, 20.5, 5); cout << "TYPE ANY KEY, THEN RETURN>"; char c; cin >> c; cout << "\n"; return 0; }
④その4、基本クラスのポインタの利用と仮想関数
#include <iostream> using namespace std; class Car{ protected: int num; double gas; public: Car(); Car(int n, double g); void setCar(int n, double g); virtual void show(); }; class RacingCar : public Car{ private: int course; public: RacingCar(); RacingCar(int n, double g, int c); void setCourse(int c); void show(); }; Car::Car() { num = 0; gas = 0.0; cout << "Create a Car, Car().\n"; } Car::Car(int n, double g) { num = n; gas = g; cout << "Create a Car, Car(n,g), number=" << num << " gas=" << gas << "\n"; } void Car::setCar(int n, double g) { num = n; gas = g; cout << "setCar(), number=" << num << " gas=" << gas << "\n"; } void Car::show() { cout << "Car::show(), number=" << num << "\n"; cout << "Car::show(), gas=" << gas << "\n"; } RacingCar::RacingCar() { course = 0; cout << "Create a RacingCar, RacingCar().\n"; } RacingCar::RacingCar(int n, double g, int c) : Car(n, g) { course = c; cout << "Create a RacingCar(n,g,c), course=" << course << "\n"; } void RacingCar::setCourse(int c) { course = c; cout << "course=" << course << "\n"; } void RacingCar::show() { cout << "RacingCar::show(), number=" << num << "\n"; cout << "RacingCar::show(), gas=" << gas << "\n"; cout << "RacingCar::show(), course=" << course << "\n"; } int main() { Car* pCars[2]; Car car1; RacingCar rccar1; pCars[0] = &car1; pCars[0]->setCar(1234, 20.5); pCars[1] = &rccar1; pCars[1]->setCar(4567, 30.5); for(int i=0; i<2; i++) { pCars[i]->show(); } cout << "TYPE ANY KEY, THEN RETURN>"; char c; cin >> c; cout << "\n"; return 0; }
_◇仮想関数
#include <iostream> using namespace std; class A { public: void f() { cout << "A::f()\n"; } }; class B : public A { public: virtual void f() { cout << "B::f()\n"; } }; class C : public B { public: void f() { cout << "C::f()\n"; } void f(int) { cout << "C::f(int)\n";} }; int main() { A a; B b; C c; A* p = &b; B* q = &c; a.f(); b.f(); c.f(); c.f(1); p->f(); q->f(); }
_◇抽象クラス
#include <iostream> using namespace std; class Vehicle{ protected: int speed; public: void setSpeed(int s); virtual void show() = 0; }; class Car : public Vehicle{ private: int num; double gas; public: Car(int n, double g); void show(); }; class Plane : public Vehicle{ private: int flight; public: Plane(int f); void show(); }; void Vehicle::setSpeed(int s) { speed = s; cout << "Vehicle::setSpeed SPEED=" << speed << "\n"; } Car::Car(int n, double g) { num = n; gas = g; cout << "Car:Car NUMBER=" << num << " GAS=" << gas << "\n"; } void Car::show() { cout << "Car::show NUMBER=" << num << "\n"; cout << "Car::show GAS=" << gas << "\n"; cout << "Car::show SPEED=" << speed << "\n"; } Plane::Plane(int f) { flight = f; cout << "Plane:Plane FLIGHT#=" << flight << "\n"; } void Plane::show() { cout << "Plane::show FLIGHT#=" << flight << "\n"; cout << "SPEED=" << speed << "\n"; } int main() { Vehicle* pVc[2]; Car car1(1234, 20.5); pVc[0] = &car1; pVc[0]->setSpeed(60); Plane pln1(232); pVc[1] = &pln1; pVc[1]->setSpeed(500); for(int i=0; i<2; i++) { pVc[i]->show(); } cout << "TYPE ANY CHAR KEY, THEN RETURN>"; char c; cin >> c; cout << "\n"; return 0; }
_◇多重継承
#include <iostream> using namespace std; class Base1{ protected: int bs1; public: Base1(int b1=0) {bs1=b1;} void showBs1(); }; class Base2{ protected: int bs2; public: Base2(int b2=0){bs2=b2;} void showBs2(); }; class Derived : public Base1, public Base2{ protected: int dr; public: Derived(int d=0){dr=d;} void showDr(); }; void Base1::showBs1() { cout << "bs1=" << bs1 << "\n"; } void Base2::showBs2() { cout << "bs2=" << bs2 << "\n"; } void Derived::showDr() { cout << "dr=" << dr << "\n"; } int main() { Derived drv; drv.showBs1(); drv.showBs2(); drv.showDr(); cout << "TYPE ANY CHAR, THEN RETURN>"; char c; cin >> c; cout << "\n"; return 0; }
_◇クラステンプレート
#include <iostream> using namespace std; template <class T> class Array{ private: T data[5]; public: void setData(int num, T d); T getData(int num); }; template <class T> void Array<T>::setData(int num, T d) { if (num < 0 || num > 4) cout << "setData:ERROR.\n"; else data[num] = d; } template <class T> T Array<T>::getData(int num) { if (num < 0 || num > 4) { cout << "getData:ERROR\n"; return data[0]; } else return data[num]; } int main() { cout << "Make int Array\n"; Array<int> i_array; i_array.setData(0, 80); i_array.setData(1, 60); i_array.setData(2, 58); i_array.setData(3, 77); i_array.setData(4, 57); for(int i=0; i<5; i++) cout << i_array.getData(i) << '\n'; cout << "Make double Array\n"; Array<double> d_array; d_array.setData(0, 35.5); d_array.setData(1, 45.6); d_array.setData(2, 26.8); d_array.setData(3, 76.2); d_array.setData(4, 85.5); for(int j=0; j<5; j++) cout << d_array.getData(j) << '\n'; cout << "TYPE ANY CHAR, THEN RETURN>"; char c; cin >> c; cout << '\n'; return 0; }
_◇STL
①vector
#include <iostream> #include <vector> using namespace std; int main() { int num; vector<int> vt; cout << "Enter # of integer>\n"; cin >> num; for (int i=0; i<num; i++) { int data; cout << "Enter Integer>\n"; cin >> data; vt.push_back(data); } cout << "DISPLAY DATA\n"; vector<int>::iterator it = vt.begin(); while(it != vt.end()) { cout << *it; cout << "-"; it++; } cout << "\n"; cout << "TYPE ANY CHAR, THEN RETURN>"; char c; cin >> c; cout << "\n"; }
②sort
#include <iostream> #include <vector> #include <algorithm> using namespace std; int main() { vector<int> vt; for (int i=0; i<10; i++) { vt.push_back(i); } cout << "Before sort = "; vector<int>::iterator it = vt.begin(); while(it != vt.end()) { cout << *it; it++; } cout << "\n"; cout << "Reverse = "; reverse(vt.begin(), vt.end()); it = vt.begin(); while(it != vt.end()) { cout << *it; it++; } cout << "\n"; cout << "After sort = "; sort(vt.begin(), vt.end()); it = vt.begin(); while(it != vt.end()) { cout << *it; it++; } cout << "\n"; cout << "TYPE ANY CHAR, THEN RETURN>"; char c; cin >> c; cout << "\n"; return 0; }
_◇例外処理
#include <iostream> using namespace std; void pause(); int main() { char c; int num; cout << "Enter 1~9>\n"; cin >> num; try { if (num <= 0) throw "Under 0."; if (num >= 10) throw "Over 10."; cout << "NUM=" << num << "\n"; } catch(char* err) { cout << "ERROR: " << err << '\n'; pause(); return 1; } pause(); return 0; } void pause() { char c; cout << "TYPE ANY CHAR, THEN RETURN>"; cin >> c; cout << '\n'; }
_◇入出力
①一文字入出力
#include <iostream> using namespace std; int main() { char ch; cout << "Enter CHARs(^Z for Exit)>\n"; while (cin.get(ch)) { cout.put(ch); } return 0; }
②出力幅の設定
#include <iostream> using namespace std; int main() { for (int i=0; i<=10; i++) { cout.width(3); cout << i; } cout << '\n'; cout << "TYPE ANY KEY, THEN RETURN>"; char c; cin >> c; cout << '\n'; return 0; }
③精度指定
#include <iostream> using namespace std; int main() { double pi = 3.141592; int num; cout << "DISPLAY PI\n"; cout << "ENTER PRECISION?(1-7)\n"; cin >> num; cout.precision(num); cout << "PI=" << pi << '\n'; cout << "TYPE ANY KEY THEN RETURN>"; char c; cin >> c; cout << '\n'; return 0; }
④書式状態フラグ
#include <iostream> using namespace std; int main() { cout.setf(ios::left, ios::adjustfield); for (int i=0; i<=5; i++) { cout.width(5); cout.fill('-'); cout << i; } cout << '\n'; cout.unsetf(ios::left); cout.setf(ios::right, ios::adjustfield); for (int j=0; j<=5; j++) { cout.width(5); cout.fill('-'); cout << j; } cout << '\n'; cout << "TYPE ANY CHAR THEN RETURN>"; char c; cin >> c; cout << '\n'; return 0; }
⑤テキストファイル出力 1
#include <fstream> #include <iostream> using namespace std; void pause(); int main() { ofstream fout("test1.txt"); if (!fout) { cout << "FILE OPEN ERROR.\n"; pause(); return 1; } else cout << "FILE OPENED.\n"; fout << "Hello!\n"; fout << "Goodbye!\n"; cout << "WRITING FILE.\n"; fout.close(); cout << "FILE CLOSED.\n"; pause(); return 0; } void pause() { cout << "TYPE ANY CHAR THEN RETURN>"; char c; cin >> c; cout << '\n'; }
⑥テキストファイル入力 2
#include <fstream> #include <iostream> #include <iomanip> using namespace std; void pause(); int main() { ofstream fout("test2.txt"); if (!fout) { cout << "FILE OPEN ERROR.\n"; pause(); return 1; } const int num = 5; int test[num]; cout << "Enter Points for " << num << '\n'; for (int i=0; i<num; i++) { cin >> test[i]; } for(int j=0; j<num; j++) { fout << "No." << j+1 << setw(5) << test[j] << '\n'; } fout.close(); pause(); return 0; } void pause() { cout << "TYPE ANY CHAR THEN RETURN>"; char c; cin >> c; cout << '\n'; }
⑦テキストファイル入力
#include <fstream> #include <iostream> using namespace std; void pause(); int main() { ifstream fin("test1.txt"); if (!fin) { cout << "FILE OPEN ERROR.\n"; pause(); return 1; } char str1[16]; char str2[16]; fin >> str1 >> str2; cout << "INPUT STRING>\n"; cout << str1 << '\n'; cout << str2 << '\n'; fin.close(); pause(); return 0; } void pause() { cout << "TYPE ANY CHAR THEN RETURN>"; char c; cin >> c; cout << '\n'; }
_◇コマンドライン引数
#include <fstream> #include <iostream> using namespace std; void pause(); int main(int argc, char* argv[]) { if (argc != 2) { cout << "Command Line Parameter Error.\n"; pause(); return 1; } ifstream fin(argv[1]); if (!fin) { cout << "FILE OPEN ERROR.\n"; pause(); return 1; } char ch; fin.get(ch); while(!fin.eof()) { cout.put(ch); fin.get(ch); } fin.close(); pause(); return 0; } void pause() { cout << "TYPE ANY CHAR THEN RETURN>"; char c; cin >> c; cout << '\n'; }
_◇バイナリサーチ
#include <cstdlib> #include <iostream> using namespace std; int int_cmp(const int* a, const int* b) { if (*a < *b) return -1; else if (*a > *b) return 1; else return 0; } int main() { int nx; cout << "nMatrix:"; cin >> nx; int* x = new int [nx]; cout << nx << " Enter Items\n"; cout << "x[0] : "; cin >> x[0]; for (int i = 1; i < nx; i++) { do { cout << "x[" << i << "] : "; cin >> x[i]; } while (x[i] < x[i - 1]); } int no; cout << "Search for : "; cin >> no; int* p = reinterpret_cast<int*>(bsearch(&no, x, nx, sizeof(int), reinterpret_cast<int (*)(const void*, const void*)>(int_cmp))); if (p != NULL) cout << "x[" << (p-x) << "]\n"; else cout << "Not Found.\n"; }
_◇ビット数カウント
int count_bits(unsigned x) { int bits = 0; while (x) { if (x & 1U) bits++; xx >>= 1; } return bits; } int count_bits(unsigned x) { int bits = 0; while (x) { x &= x - 1; bits++; } return bits; }
_◇Hello
#include <iostream> using namespace std; int main() { char c; cout << "Hello!\n"; cout << "Type 1 char, then Return.\n"; cin >> c; return 0; }
_◇数値入力
#include <iostream> using namespace std; int main() { int num1, num2; char c; cout << "整数を2つ入力、1つずつEnterすること。\n"; cin >> num1 >> num2; cout << "最初=" << num1 << "\n"; cout << "次=" << num2 << "\n"; cout << "Type 1 char, then Return.\n"; cin >> c; return 0; }
_◇ビットベクトルによる集合クラス
※ビットベクトル
bit vector
⇒整数を構成するビットの並び
※ビットベクトルによる集合
ある「それほど大きくない」整数値maxについて
│ 0、1、。。。、max-1
の整数を要素とする集合
⇒ビットベクトルとして単一整数で表現できる
例)32ビットの符号無し整数1個で
{0,1,…,31}を普遍集合(universal set)とする整数の集合が表現できる
⇒普遍集合(全体集合)