Trong C, chuỗi là mảng ký tự kết thúc bằng '\0', mảng chuỗi thành mảng 2 chiều ký tự. C++ cung cấp lớp std::string và container std::vector làm việc với chuỗi thuận tiện hơn nhiều.
1. Mảng std::string tĩnh
#include <iostream>
#include <string>
using namespace std;
int main() {
string animals[4] = {"Elephant", "Lion", "Deer", "Tiger"};
for (int i = 0; i < 4; i++)
cout << animals[i] << endl;
return 0;
}
Elephant Lion Deer Tiger
2. Vector chuỗi std::vector<std::string> (động)
#include <iostream>
#include <vector>
#include <string>
using namespace std;
int main() {
vector<string> animal_vec;
animal_vec.push_back("Elephant");
animal_vec.push_back("Lion");
animal_vec.push_back("Deer");
animal_vec.push_back("Tiger");
for (size_t i = 0; i < animal_vec.size(); i++)
cout << animal_vec[i] << endl;
return 0;
}
Elephant Lion Deer Tiger
3. Khởi tạo hiện đại (C++11 trở đi)
// Danh sách khởi tạo (initializer list)
vector<string> animals = {"Elephant", "Lion", "Deer", "Tiger"};
string arr[] = {"Elephant", "Lion", "Deer", "Tiger"}; // mảng C-style deduced size
// Duyệt range-based for (C++11)
for (const auto& s : animals) cout << s << '\n';
for (const auto& s : arr) cout << s << '\n';
4. So sánh nhanh
| Đặc điểm | string[] (mảng tĩnh) | vector<string> |
|---|---|---|
| Kích thước | Cố định tại compile-time | Động, thay đổi được |
| Quản lý bộ nhớ | Tự động (stack/global) | Tự động (heap nội bộ) |
| Thêm/xóa | Không thể | push_back, pop_back, insert, erase |
| Biết size | sizeof(arr)/sizeof(arr[0]) | .size() |
| An toàn | Dễ tràn mảng | Kiểm tra biên (at()) |
Khuyến nghị
- Ưu tiên
std::vector<std::string>cho hầu hết trường hợp – linh hoạt, an toàn, STL algorithms ready. - Chỉ dùng mảng tĩnh khi kích thước biết trước, không đổi, cần hiệu năng cực đại (embedded, real-time).
- C++17:
std::string_viewcho tham số chỉ đọc, tránh copy chuỗi.