2009-03-03 32 views
7

Tôi đang ở trong một tình huống mà tôi phải sử dụng một chức năng kiểu c trả về len sao chép. Tôi quyết định tôi nên thay đổi kích thước thành tối đa, sau đó thay đổi kích thước thành chiều dài trả lại expand size of vector passed as memoryvô hiệu hóa giá trị điền vào vector khi thay đổi kích thước? C++

Tôi biết thay đổi kích thước đặt giá trị thành fillValue (luôn luôn là 0?). Vì vậy, theres sẽ được khởi tạo vô nghĩa (hy vọng ít hơn một mb mỗi lần) 60 lần mỗi giây. Có cách nào ti vô hiệu hóa việc bắt đầu thay đổi kích cỡ?

+0

Xin lỗi, tôi không hiểu vấn đề của bạn - bạn có thể đăng một số mã mẫu không? –

Trả lời

11

Về cơ bản không có. Các phần tử trong vectơ được xây dựng mặc định khi thay đổi kích thước (cho một số nguyên kết quả là 0).

Giả sử bạn đang sử dụng dự trữ() để đảm bảo rằng thay đổi kích thước() không cấp phát bộ nhớ, tôi sẽ không lo lắng về điều này trừ khi nó chứng tỏ là vấn đề hiệu suất sau này.

Nếu bạn quan tâm, bạn có thể muốn xem xét chỉ sử dụng một mảng thông thường và lưu trữ số mục trong một biến riêng biệt. Điều này sẽ cung cấp cho bạn hiệu suất tốt nhất.

Cập nhật:

John hỏi:

là các nhà xây dựng thực sự đảm bảo về không nhớ đó? Tôi nghĩ rằng không xác định?

Có và không. Các kiểu nguyên thủy (int, bool, float, vv) có các hàm tạo mặc định khởi tạo chúng bằng không. Tuy nhiên không giống như các lớp thông thường hoặc cấu trúc trình biên dịch không tự động gọi chúng.

ví dụ

int a;   // uninitialized 
int b = int(); // initialized to 0 

Vì vector :: thay đổi kích thước sử dụng các hình thức sau khi thêm các mục mà bạn được đảm bảo rằng các yếu tố tạo ra sẽ được khởi tạo một cách chính xác không. Điều này đúng với tất cả các bộ sưu tập STL mà tạo ra các phần tử ngầm định.

+0

Nhà xây dựng có thực sự được đảm bảo bằng không bộ nhớ đó không? Tôi nghĩ rằng đó là không xác định? –

+0

Yeap, tôi đã thêm bản cập nhật giải thích lý do –

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