2013-04-11 35 views

Trả lời

7

Với std::string, điều đó hoàn toàn ổn khi std::string quản lý bộ nhớ của riêng nó.

Với chuỗi kiểu c sử dụng char*, bạn cần quản lý bộ nhớ của riêng mình.

+0

Cảm ơn! Tôi đã hy vọng nó sẽ được dễ dàng. – Tez

+2

Đây là lý do chính tại sao 'chuỗi' được thêm vào thư viện. – Barmar

1

Sử dụng string mang đến cho bạn sự sang trọng của xử lý nó giống như kiểu dữ liệu nguyên thủy khác như intfloat, vv

int a = 3; có thể được thực hiện để a = 5 hoặc a += 3 mà không cần bất kỳ tác hại

Cùng đi cho

string myString = "Hello"; 

myString = "Hello World"; 

myString+= " World"; 
+0

Tôi không nghĩ đó là chính xác. unsigned char chẳng hạn, chỉ lên tới 255. Còn hơn thế nữa và nó sẽ không hoạt động. Với chuỗi bạn chỉ có thể tiếp tục thêm bao nhiêu tùy thích (cho đến khi máy tính hết bộ nhớ). Mặc dù tôi chỉ đoán vì tôi mới sử dụng C++. Thêm 3 vào một số nguyên như trong ví dụ của bạn, bạn chỉ thay đổi giá trị được lưu trữ, bạn không tăng dung lượng của một 'int'. – Tez

+0

@Tez Có, tôi xin lỗi vì đã không làm rõ điều đó. Tôi không có ý định tăng 'kích thước' của' int' bởi doin '+ = 3'. Tôi muốn chỉ ra rằng với 'std :: string' bạn có thể thay đổi dữ liệu được giữ trong chuỗi bằng cách sử dụng' + 'vv. Với' char * 'etc, chúng ta cần sử dụng' strcat() '... –

+0

Ah ok. Không có hại gì được thực hiện :) – Tez

5

chuỗi tiêu chuẩn giống như bất kỳ loại vùng chứa nào khác như vectơ. Họ cũng có cấu trúc bộ nhớ liền kề và khi họ cần thêm không gian, họ chỉ tái phân bổ bộ nhớ cho chính họ.

Nếu bạn đang làm việc với các cập nhật chuỗi thường xuyên và chuỗi của bạn sẽ phát triển đúng lúc, bạn có thể gọi phương thức string :: reserve() để cấp phát bộ nhớ cho chuỗi của bạn để chèn mới

+0

bạn có nghĩa là * bộ nhớ * liên tục thay vì * lây nhiễm * không? – Default

+0

@Default xin lỗi, ý tôi là tiếp giáp –

Các vấn đề liên quan