Slide 1

Tài liệu tương tự
Chương trình dịch

Slide 1

Ví dụ về duyệt đồ thị ưu tiên chiều sâu DFS và ứng dụng Đồ thị ví dụ: Nguyễn Hữu Tuân vimaru.edu.vn Hình 1: Đồ thị vô hướng có 8 đỉnh Với đồ thị trên,

Trường ĐHBK Hà Nội Khoa Điện Bộ môn Điều khiển Tự động Tài liệu hướng dẫn thực hành: KĨ THUẬT LẬP TRÌNH C/C++ Bài 1: Lập trình cơ sở 1 Mục đích bài th

Hàm và lớp template trong Lập trình hướng đối tượng Hàm và lớp template trong Lập trình hướng đối tượng Bởi: unknown Trong phần này, chúng ta tìm hiểu

Lập trình và ngôn ngữ lập trình

Template and Exception Template and Exception Bởi: Thanh Hiền Vũ TEMPLATE Trong phần này, chúng ta tìm hiểu về một trong các đặc tính còn lại của C++,

TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI VIỆN CÔNG NGHỆ THÔNG TIN VÀ TRUYỀN THÔNG TIN HỌC ĐẠI CƯƠNG Bài 5. Kiểu dữ liệu và biểu thức trong C Nội dung 1. Các ki

Bài 7. Con trỏ Mục tiêu: 1. Luyện tập sử dụng con trỏ và địa chỉ của các biến 2. Sử dụng con trỏ khi thao tác với mảng. Giới hạn: không dùng các thư v

Microsoft Word - cau-truc-du-lieu-hang-doi.docx

Animation, Modules 6 - Hoạt hình, tách file

Những cơ sở của ngôn ngữ C# Những cơ sở của ngôn ngữ C# Bởi: phamvanviet truonglapvy Trong chương này sẽ trình bày về hệ thống kiểu trong C#; phân biệ

Chương 1:

NGÔN NGƯ LÂ P TRIǸH Biên tập bởi: nguyenvanlinh

Kiểu dữ liệu văn bản Kiểu dữ liệu văn bản Bởi: PGS. TS. NGƯT Phạm Văn Huấn Ngoài những dữ liệu số như các số nguyên, số thực, máy tính còn có thể lưu

Tìm hiểu ngôn ngữ lập trình Visual Basic Tìm hiểu ngôn ngữ lập trình Visual Basic Bởi: Khuyet Danh Tìm hiểu ngôn ngữ lập trình Visual Basic Tổng quan

Chương trình dịch

Microsoft PowerPoint - 02_Address_Book

Chương trình dịch

TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI VIỆN CÔNG NGHỆ THÔNG TIN VÀ TRUYỀN THÔNG TIN HỌC ĐẠI CƯƠNG Bài 11. Mảng và xâu kí tự Nội dung 1. Mảng 2. Xâu kí tự 2 1

Lớp đối tượng String Lớp đối tượng String Bởi: Khuyet Danh Ngôn ngữ C# hỗ trợ khá đầy đủ các chức năng của kiểu chuỗi mà chúng ta có thể thấy được ở c

I. MSWLogo là gì. Giới thiệu. Là một ngôn ngữ lập trình được thiết kế và phát triển bởi Seymour Papert, Daniel Bobrow và Wallace Feurzeig. Trong chươn

TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI VIỆN CÔNG NGHỆ THÔNG TIN VÀ TRUYỀN THÔNG TIN HỌC ĐẠI CƯƠNG Bài 11. Tệp tin Nội dung 1. Khái niệm cơ bản 2. Các thao tá

HỘI THI TIN HỌC TRẺ TỈNH AN GIANG ĐỀ CHÍNH THỨC ĐỀ THI LÝ THUYẾT BẢNG A - KHỐI TIỂU HỌC Khóa ngày: Thời gian : 20 phút (không kể thời gian

View, Procedure, Function & Trigger

PowerPoint Presentation

Microsoft Word - danh-sach-lien-ket-doi-trong-c.docx

Câu lệnh (statement) Câu lệnh (statement) Bởi: Khuyet Danh Trong C# một chỉ dẫn lập trình đầy đủ được gọi là câu lệnh. Chương trình bao gồm nhiều câu

ĐHQG TPHCM ĐH Bách Khoa Khoa Đ-ĐT BM Điện Tử Điểm Đáp án của Đề kiểm tra giửa HK 2 NH: Môn: Vi xử lý Mã MH: Ngày thi: 20/03/2013 Thời

Chuỗi Chuỗi Bởi: phamvanviet truonglapvy Chuỗi (string) trong C# là một kiểu dựng sẵn như các kiểu int, long, có đầy đủ tính chất mềm dẻo, mạnh mẽ và

Lớp và đối tượng-các hàm và các lớp friend Lớp và đối tượng-các hàm và các lớp friend Bởi: Thanh Hiền Vũ CÁC HÀM VÀ CÁC LỚP friend Một hàm friend của

Nhúng mã-cách khai báo biến Nhúng mã-cách khai báo biến Bởi: Khoa CNTT ĐHSP KT Hưng Yên Nhúng mã javascript trong trang HTML Bạn có thể nhúng JavaScri

ĐỀ THI GIỮA KỲ MÔN: LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG Đề số 1. Thời gian 120 phút (Sinh viên KHÔNG được sử dụng tài liệu hay máy tính ) Xây dựng lớp STRING và

Microsoft Word - doc_ghi_file_trong_nodejs.docx

OpenStax-CNX module: m Giới thiệu về ngôn ngữ C và môi trường turbo C 3.0 ThS. Nguyễn Văn Linh This work is produced by OpenStax-CNX and licens

Microsoft Word - tra_cuu_bang_ascii_trong_html.docx

Microsoft Word - jsp_syntax.docx

100 CÂU TRẮC NGHIỆM TIN HỌC 6 I. CÂU HỎI TRẮC NGHIỆM Câu 1: Để viết đơn đăng kí tham gia câu lạc bộ, em nên sử dụng phần mềm nào dưới đây? A. Chương t

Khoa Quản lý Đất đai và Bất động sản KS. Đinh Quang Vinh ( )

Lập trình cấu trúc trong Visual Basic Lập trình cấu trúc trong Visual Basic Bởi: Nguyễn Sơn Học xong chương này, sinh viên phải nắm bắt được các vấn đ

Slide 1

PowerPoint Template

ĐỀ cương chương trình đẠi hỌc

Bài tập thực hành NNLT Visual Basic GV. Nguyễn Thị Hải Bình BÀI THỰC HÀNH ÔN TẬP 1. Sinh viên ĐỌC CẨN THẨN TẤT CẢ NỘI DUNG trong bài thực hành trước k

05-quanlytientrinh.pptx

Trung Tâm Gia Sư Tài Năng Việt Đề Số 1 Câu 1: Sau khi thực hiện đoạn chương trình sau, giá trị của biến S bằng bao nhiêu: S

Danh sách tuyến tính kiểu hàng đợi Danh sách tuyến tính kiểu hàng đợi Bởi: Khoa CNTT ĐHSP KT Hưng Yên ĐỊNH NGHĨA Hàng đợi là một vật chứa (container)

Copyright vietjack.com Chuỗi (String) trong C# Trong C#, bạn có thể sử dụng các chuỗi (string) như là mảng các ký

Microsoft Word - TaiLieuTNKTD1PhanPLC-05[1].2008.doc

MÁY TOÀN ĐẠC ĐIỆN TỬ LEICA TCR1101

نظام حماية الخزنة

TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI VIỆN CÔNG NGHỆ THÔNG TIN VÀ TRUYỀN THÔNG TIN HỌC ĐẠI CƯƠNG Bài 9. Vào ra dữ liệu trong C Các lệnh vào ra dữ liệu C cun

Slide 1

PHẦN II

Tài liệu Hướng dẫn sử dụng

TRƯỜnG ĐẠI HỌC BÁCH KHOA HÀ nội VIỆn CÔnG nghệ THÔnG TIn VÀ TRUYỀn THÔnG TIN HỌC ĐẠI CƯƠNG Bài 10. Các cấu trúc lập trình trong C Nội dung 1. Cấu trúc

Bài thực hành 6 trang 106 SGK Tin học 10

Microsoft Word - bo_tien_xu_ly_trong_c.docx

Bài 4 Tựa bài

Microsoft PowerPoint - OOP4-OperatorOverloading_new.ppt

Chương trình dịch

BỘ GIÁO DỤC VÀ ĐÀO TẠO TRUNG TÂM LUYỆN THI THỦ KHOA Hồ Chí Minh - Năm

9-KiemThu

Kyõ Thuaät Truyeàn Soá Lieäu

Bài tập chương 1 ngôn ngữ lập trình visual basic Bài tập chương 1 ngôn ngữ lập trình visual basic Bởi: Khoa CNTT ĐHSP KT Hưng Yên MỤC TIÊU: SAU KHI HO

Slide 1

PowerPoint Presentation

Các Lược Giảng Chuyên Sâu về Sử Dụng Văn Lệnh BASH trong Linux/Bài 1 Các Lược Giảng Chuyên Sâu về Sử Dụng Văn Lệnh BASH trong Linux/Bài 1 Bởi: CS Võ Q

Chương II - KIẾN TRÚC HỆ ĐIỀU HÀNH

Soạn bài liệt kê

BÀI TẬP THỰC HÀNH

Công ty CP công nghệ thẻ NACENCOMM HÓA ĐƠN ĐIỆN TỬ CA2 CÔNG TY CỔ PHẦN CÔNG NGHỆ THẺ NACENCOMM TÀI LIỆU NGHIỆP VỤ HÓA ĐƠN ĐIỆN TỬ CA2 Hà Nội 12/2017 1

TRUNG TÂM TIN HỌC- ĐẠI HỌC AN GIANG Số 25 - Võ Thị Sáu, TP Long xuyên, An giang Tels: (076) ext. 666; Fax: (076) Website:

Lkgjlfjq?etyuiiofjkfjlsfjkslddghdgertt

Operating Instructions (Vietnamese)

Chuyển đổi tương tự - số photonic bằng cách dùng buồng cộng hưởng Fabry- Perot phi tuyến Chuyển đổi tương tự - số song song về mặt không gian được đề

Các cấu trúc logic trong lập trình 1 Cấu trúc tuần tự (Sequence) 1.1 Những câu lệnh phải được sắp xếp theo thứ tự Một số hướng dẫn cho việc tổ chức câ

Array, Indexer và Collection Array, Indexer và Collection Bởi: phamvanviet truonglapvy Mảng (Array) Mảng là một tập hợp các phần tử có cùng kiểu, được

Nhập môn Công Nghệ Thông Tin 1

Bài 15: QUẢN LÝ BẢNG TÍNH 15.1 Các khái niệm Ô (cell) là đơn vị cơ sở của bảng tính, mỗi ô có địa chỉ riêng, địa chỉ gồm Chỉ số cột Chỉ số dòng, ví dụ

Bài 1 Nội dung chính trong bài: Khám phá những công cụ vẽ cải tiến Lệnh Copy và Paste Motion Tìm hiểu tính năng nhập và xuất thành video cải tiến Sử d

Chöông 1 (tt.)

CÔNG TY TNHH THƯƠNG MẠI VÀ DỊCH VỤ NGUYỄN ĐỨC 126 Lê Thanh Nghị - Quận Hai Bà Trưng - Hà Nội Điện Thoai : Fax : Website : www.

BỘ Y TẾ TRƯỜNG ĐẠI HỌC ĐIỀU DƯỠNG NAM ĐỊNH Số: 1893/QĐ-ĐDN CỘNG HOÀ XÃ HỘI CHỦ NGHĨA VIỆT NAM Độc lập -Tự do- Hạnh phúc Nam Định, ngày 09 tháng 12 năm

TRƯỜNG ĐẠI HỌC TÀI CHÍNH MARKETING KHOA DU LỊCH T CỘNG HÒA XÃ HỘI CHỦ NGHĨA VIỆT NAM Độc lập Tự do Hạnh phúc Tp. HCM, ngày 26 tháng 11 năm 2018 KẾ HOẠ

Microsoft Word - phuctrinh

HỌC VIỆN KỸ THUẬT QUÂN SỰ KHOA CÔNG NGHỆ THÔNG TIN CỘNG HÒA XÃ HỘI CHỦ NGHĨA VIỆT NAM Độc lập Tự do Hạnh phúc ĐỀ CƯƠNG CHI TIẾT HỌC PHẦN CÔNG NGHỆ CLI

i LỜI CAM ĐOAN Tôi xin cam đoan tất cả các nội dung của luận văn này hoàn toàn được hình thành và phát triển từ quan điểm của chính cá nhân tôi, dưới

2 2. Quỹ hoạt động theo mô hình Công ty trách nhiệm hữu hạn một thành viên do Nhà nước nắm giữ 100% vốn điều lệ. 3. Quỹ có tư cách pháp nhân, có vốn đ

Microsoft Word - su_dung_sqlite_voi_php.docx

Microsoft Word - TT08BKHCN.doc

TRƯỜNG ĐH KH XH& NV TRUNG TÂM TIN HỌC CỘNG HÒA XÃ HỘI CHỦ NGHĨA VIỆT NAM Độc lập Tự do Hạnh phúc TP.Hồ Chí Minh, ngày 23 tháng 02 năm 2013 ĐỀ CƯƠNG CH

Chương trình dịch

CÔNG BÁO/Số /Ngày QUY TRÌNH KIỂM TOÁN BÁO CÁO QUYẾT TOÁN NGÂN SÁCH NHÀ NƯỚC (Ban hành kèm theo Quyết định số 03/2013/QĐ-KTNN ng

Cách tạo User và Thiết kế Database Cách tạo User và Thiết kế Database Bởi: Khoa CNTT ĐHSP KT Hưng Yên Cách tạo một User Database Chúng ta có thể tạo m

SM-G925F Sách hướng dẫn sử dụng Vietnamese. 04/2015. Rev.1.0

PX870/770_EN

000.FF50VI. Trang bia 1 - bia ngoai

(Tái bản lần thứ hai)

Điểm ĐỀ THI HK 1 ( ) Môn: Kỹ thuật số Thời gian: 110 phút (SINH VIÊN KHÔNG ĐƯỢC SỬ DỤNG TÀI LIỆU) Chữ kí giám thị HỌ TÊN:. MSSV: NHÓM:.. SINH

Bản ghi:

Bài 12: Thư viện STL (Standard Template Library) 1

Khái niệm STL là thư viện chuẩn của C++, được xây dựng sẵn Cài đặt các cấu trúc dữ liệu và thuật toán thông dụng Bao gồm các lớp và hàm khuôn mẫu, cho phép làm việc với dữ liệu tổng quát Nằm trong một namespace có tên std Các phần chính: Các lớp dữ liệu cơ bản: string, complex Xuất nhập (IO) Các lớp chứa (containers): list, vector, deque, stack, map, set, Duyệt phần tử của các lớp chứa (iterators) Một số thuật toán thông dụng: tìm kiếm, so sánh, sắp xếp, Quản lý bộ nhớ, con trỏ Xử lý ngoại lệ (exception handling) 2

Xử lý chuỗi #include <string> Lớp string cho chuỗi ASCII và wstring cho Unicode Các thao tác cơ bản: +, += (nối chuỗi); ==,!=, >, <, >=, <= (so sánh); << (xuất), >> (nhập) Độ dài chuỗi: int string::length() const Chuỗi con: string string::substr(int off, int count) const Tìm chuỗi con: int string::find(const char* str, int pos) const Đổi sang chuỗi của C: const char* string::c_str() const Ví dụ: string s1, s2("test123"); cin >> s1; s1 += "123"; cout << (s2==s1? "same" : "different") << endl; int pos = s2.find("est"); string s3 = s2.substr(pos, 4); char s4[100]; strcpy(s4, s3.c_str()); cout << s4 << endl; 3

Các lớp chứa (containers) 4

Mảng: vector Là mảng động Có thể chứa dữ liệu kiểu bất kỳ (template): vector<type> #include <vector> Ví dụ sử dụng: int p[] = {4, 2, 6}; vector<int> a(p, p+3); // khởi tạo từ mảng C a.push_back(1); // thêm vào cuối a.insert(a.begin() + 2, 3); // thêm ở vị trí 2 a.insert(a.end() - 1, 5); // thêm ở vị trí 1 từ cuối a[3] = 10; // phần tử thứ 4 vector<int>::iterator i; // duyệt xuôi for (i = a.begin(); i!= a.end(); i++) *i += 5; vector<int>::reverse_iterator j; // duyệt ngược for (j = a.rbegin(); j!= a.rend(); j++) cout << *j << ' '; 5

iterator Các lớp chứa của STL (vector, list, ) có định nghĩa kiểu iterator tương ứng để duyệt các phần tử (theo thứ tự xuôi) Mỗi iterator chứa vị trí của một phần tử Các hàm begin() và end() trả về một iterator tương ứng với các vị trí đầu và cuối Các toán tử với iterator: i++ phần tử kế tiếp i-- phần tử liền trước *i giá trị của phần tử Tương tự, có reverse_iterator để duyệt theo thứ tự ngược Các hàm rbegin() và rend() 6

Danh sách liên kết: list Có thể chứa dữ liệu kiểu bất kỳ (template): list<type> #include <list> Duyệt danh sách dùng iterator tương tự như với vector Ví dụ sử dụng: double p[] = {1.2, 0.7, 2.2, 3.21, 6.4}; list<double> l(p, p+5); // khởi tạo từ mảng C l.push_back(3.4); // thêm vào cuối l.pop_front(); // xoá phần tử đầu list<double>::iterator i = l.begin(); // phần tử đầu *i = 4.122; // gán giá trị i++; // phần tử kế tiếp l.insert(i, 5.0); // chèn phần tử l.erase(i); // xoá phần tử l.sort(); // sắp xếp (tăng dần) for (i = l.begin(); i!= l.end(); i++) // duyệt xuôi cout << *i << ' '; 7

Thuật toán: tìm kiếm Phần tử lớn nhất, bé nhất: vector<float>::iterator p = max_element(a.begin()+2, a.end()-3); list<string>::iterator p = min_element(l.begin(), l.end()); Dựa trên các toán tử so sánh cần định nghĩa nếu chưa có Tìm đúng giá trị: list<float>::iterator p = find(p1, p2, 2.5f); Tìm theo tiêu chuẩn: cần định nghĩa một hàm đánh giá bool isodd(int i) { return i%2 == 1; } list<int>::iterator p = find_if(p1, p2, isodd); Tìm kiếm và thay thế, xoá: replace_if(p1, p2, isodd, 10); remove_if(p1, p2, isodd); 8

Thuật toán: sắp xếp Sắp xếp mảng: Dùng toán tử so sánh: sort(a.begin(), a.end()); Phải định nghĩa toán tử < cho kiểu dữ liệu được chứa Dùng hàm so sánh tự định nghĩa: bool compare(const table& a, const table& b) { return a.c1 < b.c1 (a.c1 == b.c1 && a.c2 < b.c2); } sort(a.begin(), a.end(), compare); Sắp xếp danh sách: l.sort(); l.sort(compare); 9

Xuất/nhập (input/output) 10

Tổng quan Trong STL, việc xuất nhập được thông qua các luồng thông tin (data streams) #include <iostream> Luồng xuất (output streams): để xuất dữ liệu Toán tử << Lớp cơ sở: basic_istream<type> Luồng nhập (input streams): để nhập dữ liệu Toán tử >> Lớp cơ sở: basic_ostream<type> Luồng xuất nhập (input/output streams): cả xuất và nhập Toán tử >> và << Lớp cơ sở: basic_iostream<type> Mỗi kiểu đối tượng muốn làm việc được với các lớp trên cần phải được định nghĩa toán tử >> và << 11

Sơ đồ các lớp xuất/nhập ios_base basic_streambuf<> streambuf/wstreambuf basic_ios<> ios/wios basic_filebuf<> filebuf/wfilebuf basic_stringbuf<> stringbuf/ wstringbuf basic_istream<> istream/wistream basic_ostream<> ostream/wostream cin basic_iostream<> iostream/woistream cout, cerr, clog/ wcout, wcerr, wclog basic_ifstream<> ifstream/wifstream basic_fstream<> fstream/wfstream basic_ofstream<> ofstream/wofstream vào/ra file basic_istringstream<> istringstream/ wistringstream basic_stringstream<> stringstream/ wstringstream basic_ostringstream<> ostringstream/ wostringstream vào/ra chuỗi 12

Vào/ra chuẩn Các đối tượng cin thuộc kiểu istream, tương đương với stdin cout thuộc kiểu ostream, tương đương với stdout cerr thuộc kiểu ostream, tương đương với stderr Các đối tượng wcin, wcout, wcerr để làm việc với Unicode Ví dụ: int i; float a[10]; cout << "Nhap i va a[i]: "; if (cin >> i >> a[i]) { cout << "a[" << i << "] = " << a[i] << endl; cout.flush(); } else cerr << "Nhap du lieu loi" << endl; Đọc một dòng: string s; getline(cin, s); Chú ý tránh sử dụng lẫn lộn với các hàm của C 13

Định dạng dữ liệu xuất Các hàm thay đổi định dạng: setf(fmtflags flag, fmtflags mask): thay đổi các cờ định dạng dec/hex/oct: số nguyên hệ cơ số 10/16/8 (basefield) fixed/scientific: số thực thập phân hoặc khoa học (floatfield) internal/left/right: căn lề (adjustfield) width(int w): thay đổi độ rộng của trường precision(int p): thay đổi độ chính xác Ví dụ: cout.width(15); cout.setf(ios::right, ios::adjustfield); cout.setf(ios::scientific, ios::floatfield); cout.precision(3); cout << 34.5678; Dùng các manipulator: Bao gồm: internal, left, right, dec, hex, oct, fixed, scientific, setprecision(p), setw(w), setiosflag(flags), endl, ends, flush #include <iomanip> Ví dụ: cout << setw(15) << right << scientific << setprecision(3) << 34.5678; 14

Đọc/ghi file #include <fstream> Sử dụng ifstream (file chỉ đọc), ofstream (chỉ ghi), fstream (đọc/ghi) Đọc/ghi dữ liệu dùng các toán tử >> và << tương tự như với vào/ra chuẩn Mở file: ifstream f1("ten file", ios::in ios::binary); ofstream f2; f2.open("ten file", ios::out ios::trunc); Các mode: app Luôn nhảy con trỏ tới cuối file khi ghi trunc Xoá nội dung cũ khi mở ate Con trỏ tới cuối file binary File nhị phân Đóng file: f.close(); in Cho phép đọc out Cho phép ghi Có thể để đóng file tự động trong destructor khi các đối tượng bị huỷ Chú ý khi dùng fstream để dùng cả đọc và ghi: trước khi chuyển từ việc đọc sang ghi hoặc ngược lại, phải dùng hàm seekg/seekp(...) 15

Đọc/ghi file dạng nhị phân Mở file: thêm cờ ios::binary Đọc dữ liệu: file.read(char* buffer, int size) file.gcount() Ghi dữ liệu: // số byte đã được đọc file.write(char* buffer, int size) Kiểm tra lỗi đọc/ghi: file.read/write(...) if (!file) {...} if (!file.read/write(...)) {...} Di chuyển con trỏ file: C++ phân biệt con trỏ đọc và con trỏ ghi Di chuyển con trỏ đọc file: file.seekg(int pos, ios::beg/cur/end) Vị trí con trỏ đọc hiện tại: file.tellg() Di chuyển con trỏ ghi file: file.seekp(int pos, ios::beg/cur/end) Vị trí con trỏ ghi hiện tại: file.tellp() 16

Đọc/ghi file: ví dụ copy file bool copy_file(const char* src, const char* dst) { ifstream fs(src, ios::in ios::binary); ofstream fd(dst, ios::out ios::binary ios::trunc); if (!fs!fd) return false; } char buf[1024]; while (fs) { fs.read(buf, sizeof(buf)); fd.write(buf, fs.gcount()); } return true; 17

Vào/ra với chuỗi #include <sstream> Sử dụng istringstream (chỉ đọc), ostringstream (chỉ ghi), stringstream (đọc/ghi) Đọc từ chuỗi: string s("10 3.56 y"); istringstream str(s); int i; double d; char c; str >> i >> d >> c; Dùng để trích dữ liệu từ chuỗi Ghi ra chuỗi: ostringstream str; str << "i=" << i << ", d=" << d << ", c=" << c; string s = str.str(); Dùng để định dạng dữ liệu ra chuỗi 18

Định nghĩa toán tử >> và << Việc xuất/nhập dữ liệu dựa trên định nghĩa chồng các toán tử >> và << ostream& operator <<(ostream& os, char c); ostream& operator <<(ostream& os, const char* s); ostream& operator <<(ostream& os, double n);... istream& operator >>(istream& is, char& c); istream& operator >>(istream& is, const char* s); istream& operator >>(istream& is, double& n);... Các toán tử này trả về chính đối tượng ostream/istream nhận ở tham số để có thể móc nối nhiều lần: is >> a >> b >> c; os << a << b << c; Cần định nghĩa các toán tử này cho các lớp mới định nghĩa: ostream& operator <<(ostream& os, const Ellipse& e) { return os << e.rx << e.ry; } istream& operator >>(istream& is, Ellipse& e) { return is >> e.rx >> e.ry; } 19

Khái niệm về serialize (tuần tự hoá) Là việc chuyển đổi một đối tượng có cấu trúc dữ liệu bất kỳ thành một luồng thông tin có thứ tự để có thể ghi ra rồi đọc lại Ứng dụng trong việc truyền tin và lưu trữ dữ liệu Với STL, ta có thể định nghĩa các toán tử >> và << để thực hiện serialize Ví dụ: istream& operator >>(istream& is, SinhVien& sv) { } return is >> sv.ten >> sv.khoa >> sv.nam_sinh; ostream& operator <<(ostream& os, SinhVien& sv) { } return os << sv.ten << sv.khoa << sv.nam_sinh; 20

Bài tập 1. Viết chương trình nhập mảng số nguyên có số phần tử bất kỳ từ bàn phím rồi in ra các số chẵn bằng cách duyệt mảng 2. Sửa bài trên thay duyệt mảng bằng dùng hàm find_if(...) để in ra các số chẵn 3. Sửa lại chương trình trên để dùng DSLK thay cho mảng 4. Cho hai mảng a1 và a2 đều có giá trị tăng dần, viết hàm trộn hai mảng này thành mảng a3 cũng có giá trị tăng dần 5. Đọc dữ liệu từ file và lưu dưới dạng danh sách các dòng, sau đó in ra các dòng có độ dài từ 10 đến 20 ký tự 6. Định nghĩa toán tử << và >> cho lớp Fraction và thử dùng nó để xuất/nhập dữ liệu với cin/cout, file, chuỗi 7. Định nghĩa các toán tử << và >> cho lớp Complex để đọc/ghi dữ liệu dưới dạng nhị phân 21