Hỏi về i++, ++i và i+=1 trong C++

Thì như tiêu đề đó ạ, có lần em đọc qua bài nào đó thì nên dùng i+=1 hơn?? (giảm độ phức tạp) còn i++ và ++i thì nên dùng trong trường hợp nào ạ??

Hi Vu Huyen Anh.
Mình không biết chính xác cái nào tốt hơn nhưng theo mình nghĩ thì i++ sẽ tốt hơn. Vì giả sử i+=1 tốt hơn thì trình biên dịch hoàn toàn có thể thay thế i++ bằng i+=1 khi biên dịch vậy nên ++ sẽ luôn có độ phức tạp nhỏ hơn hoặc bằng +=1

3 Likes

i++ thì nó trả về giá trị rồi nó mới tăng giá trị
++i thì nó tăng giá trị rồi mới trả về giá trị
i+=1 nếu k nhầm thì giống ++i

int i = 3;
int a = i++; // a = 3, i = 4
int b = ++a; // b = 4, a = 4
4 Likes

Trước khi bắt đầu tìm hiểu trường hợp sử dụng, hãy chắc chắn rằng bạn đã hiểu về sự khác nhau của i+=1, i++, ++i.
Sau đó thì đọc các ví dụ dưới đây ↓

Vấn đề 1: Số lượng sách trong thư viện là 100, hôm nay thư viện nhập thêm 1 cuốn, hãy cập nhật lại số sách trong thư viện.

int so_luong_sach = 100;
so_luong_sach += 1;

→ Sử dụng i+=1, i++, ++i đều như nhau, đều tốn 2 dòng code.
Thích dùng cái nào thì dùng.

Vấn đề 2: Số lượng sách trong thư viện là 100, hôm nay thư viện nhập thêm 1 cuốn, hãy hiển thị số lượng sách đang có (trước khi nhập thêm) và số lượng sách đang có (sau khi đã nhập thêm), và cập nhật lại số lượng sách trong thư viện

int so_luong_sach = 100;
cout << so_luong_sach++; // 100 (số lượng sách trước khi nhập thêm)
cout << so_luong_sach; // 101 (số lượng sách sau khi đã nhập thêm)
// biến so_luong_sach đã được cập nhật thành 101

→ Vấn đề này dùng i++ là tốt nhất, tốn 3 dòng code.
Dùng i+=1 thì tốn tới 4 dòng.

int so_luong_sach = 100;
cout << so_luong_sach; // 100 (số lượng sách trước khi nhập thêm)
so_luong_sach += 1;
cout << so_luong_sach; // 101 (số lượng sách sau khi đã nhập thêm)

Vấn đề 3: Số lượng sách trong thư viện là 100, hôm nay thư viện nhập thêm 1 cuốn, hãy hiển thị số lượng sách đang có sau khi đã nhập thêm, và cập nhật lại số lượng sách trong thư viện

int so_luong_sach = 100;
cout << ++so_luong_sach; // 101 (số lượng sách sau khi đã nhập thêm)
// biến so_luong_sach đã được cập nhật thành 101

→ Vấn đề này dùng ++i là tốt nhất, tốn 2 dòng code.


Tùy theo logic bài toán mà bạn đang làm, lựa chọn sử dụng i+=1, i++, ++i sao cho code ngắn gọn là điều quan trọng nhất.
Còn về hiệu năng thì không cần quan tâm so sánh giữa i+=1, i++, ++i, chẳng khác nhau mấy đâu.

4 Likes

độ phức tạp về O(1), không đáng kể.
i++ sẽ lưu lại giá trị trong 1 biến tạm, trả về giá trị rồi mới tăng.
Còn ++i, là như i += 1, nhưng viết ngắn hơn.
Thông thường thì ++i và i += 1 sẽ nhanh hơn i++.

2 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?