2011-12-05 20 views
8

một std::vector<char> có thể bị đối xử như một mảng theo cách này:thể std :: vector được đối xử như một mảng

std::vector<char> v(10); 
strncpy(&v[0], "hello", 9); // <-- Is this safe? 
+0

Có, tôi muốn nhập std :: vector . Hãy để tôi cố gắng chỉnh sửa bài đăng gốc của mình. – user1061590

+2

@TokenMacGuy: Đó không phải là cách hoạt động của 'strncpy' ... –

+0

Tôi biết câu hỏi khá đơn giản và thẳng thắn, nhưng bạn không nên dựa vào tiêu đề một mình để tạo nên câu hỏi và thêm một câu hỏi thực sự, vâng, yêu cầu một câu hỏi. –

Trả lời

13

Vâng, đó là tốt. Kể từ C++ 03, vector là bắt buộc để có bộ nhớ tiếp giáp.

Kể từ C++ 11, điều này cũng đúng cho std::string, nhân tiện; và bạn có thể nói v.data() làm từ đồng nghĩa cho &v[0] (cũng hợp lệ khi v trống).

+0

Đề cập đến của bạn * Như của C++ 03 .. * cho tôi một nghi ngờ về nó như thế nào trong C + + 11, Vì vậy, chỉ để xác nhận AFAIK, 'std :: Vector'is vẫn còn cần phải có lưu trữ liền kề ngay cả trong C++ 11, Có đúng không? –

+0

@Als Có, điều đó đã không thay đổi trong C++ 11. – bames53

+0

Có. Tiêu chuẩn mới không thay đổi yêu cầu lưu trữ 'vector'. Trong tiếng Anh, "gần như" có nghĩa tương tự như "từ", nhưng ngụ ý một khung thời gian gần đây hơn cho sự kiện này. :) –

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