Có thể sử dụng một cái gì đó như generate_n
để tạo số const vector
, ví dụ, số ngẫu nhiên không? Tôi không thể nghĩ ra một cách để làm điều đó mà không phát sinh vector
và thực hiện nhiệm vụ trong hàm tạo.Làm cách nào để bạn khởi tạo vectơ const của các kết quả hàm bằng C++ 11?
Trả lời
Sử dụng trình trợ giúp tĩnh hoặc lambda nếu bạn muốn; di chuyển ngữ nghĩa/sao chép elision như chỉ ra trong các ý kiến sẽ làm cho điều này khá rẻ vì tất cả các trình biên dịch phong nha sẽ bỏ qua một bản sao đầy đủ của vector trả về bởi người trợ giúp. Thay vào đó, họ sẽ chỉ tạo mã để điền vào một véc tơ duy nhất và sau đó sử dụng mã đó.
std::vector<int> Helper()
{
const size_t n = 10;
std::vector<int> x(n);
std::generate_n(x.begin(), n, someGenerator);
return x;
}
const std::vector<int> my_const_vec(Helper());
đây là phiên bản lambda:
const std::vector<int> my_const_vec([]()
{
const size_t n = 10;
std::vector<int> x(n);
std::generate_n(x.begin(), n, someGenerator);
return x;
}());
Với một trình trợ giúp đơn giản như vậy, hầu hết các trình biên dịch thậm chí sẽ bỏ ẩn hoàn toàn bản sao. – Agentlien
Bằng cách này, theo tiêu chuẩn * hiện tại * lambda của bạn cần một '-> std :: vector
hmm bây giờ tôi đang bối rối. Đã thử với gcc4.7 và cl17.00 và cả hai đều chấp nhận nó, nhưng thực sự tôi dường như nhớ các phiên bản trước của cả hai sẽ từ chối nó. – stijn
đóng gói khởi tạo của bạn thành một chức năng và tuyên bố nó "constexpr" để bạn có thể sử dụng nó để khởi tạo một biểu thức const.
Không cần một 'constexpr' ở đây, vì anh ta không cần một biểu thức hằng số biên dịch thời gian (mà một' std :: vector' return không bao giờ có thể, dù sao). –
Bạn có thể sử dụng std::transform
cũng
vector<int> vec(10,1);
transform(vec.begin(), vec.end(), vec.begin(), func);
đâu func là:
int func(int i)
{
//return a random generated number
}
- 1. C++ 11 khởi tạo vector trong một cuộc gọi hàm
- 2. C++ 11 Khởi tạo lớp mảng const tĩnh
- 3. C++ 11 khởi tạo chuỗi
- 4. Cách khởi tạo trường const trong hàm tạo?
- 5. Tạo vectơ kết quả của các cuộc gọi hàm lặp lại trong R
- 6. C++ 11: viết hàm khởi tạo bằng nguyên tử <bool> nguyên tử?
- 7. Cách khởi tạo vectơ trong C++
- 8. Làm cách nào để khởi tạo một const std :: pair?
- 9. Cách khởi tạo thành viên const tĩnh trong C++?
- 10. Làm cách nào để khởi tạo biến CMake với kết quả của lệnh shell
- 11. C++ 11 Khởi tạo chủ đề với các hàm thành viên biên dịch lỗi
- 12. khởi Complex ruộng const
- 13. Làm thế nào để khởi tạo hiệu quả kết cấu bằng số không?
- 14. Làm thế nào để khởi tạo const thành viên của cấu trúc trên heap
- 15. Làm cách nào để truyền một trình tạo số ngẫu nhiên C++ 11 cho một hàm?
- 16. Làm cách nào để mang lại kết quả từ hàm tạo bộ tạo Python lồng nhau?
- 17. Làm cách nào để mở rộng vectơ thành các đối số của hàm trong r?
- 18. Khởi tạo vec tơ vectơ?
- 19. Làm cách nào để lấy g ++ để biên dịch mã C++ 11 với một hàm tạo di chuyển?
- 20. Đối tượng được khởi tạo giá trị trong C++ 11 và std :: constructor vector
- 21. Làm thế nào để bạn khai báo một mảng const của con trỏ hàm?
- 22. Có cách nào tốt để đảm bảo kết quả hàm C++ không bị bỏ qua?
- 23. Làm cách nào để khởi tạo một std :: vector trong một hàm tạo lớp trong C++?
- 24. Làm cách nào để truy xuất hiệu quả các vectơ K-tương tự bằng cách tương tự cosin bằng R?
- 25. C++ 11 kế thừa các hàm tạo mẫu
- 26. C++: khởi tạo hàm tạo cho mảng
- 27. Tôi nên tạo một vectơ khởi tạo như thế nào?
- 28. C++ constructor: rác trong khi khởi tạo các tham chiếu const
- 29. Tạo vectơ của boost dynamic_bitset trong C++
- 30. Toán tử bậc ba + hàm tạo C++ 11 từ initializer_list
Tôi biết bạn có câu trả lời cho điều này bây giờ, nhưng chỉ FYI bắt nguồn 'vector' (hoặc loại khác trong ' không gian tên std' không được dự định cụ thể để được dẫn xuất) là [rủi ro] (http://stackoverflow.com/questions/2034916/is-it-okay-to-inherit-implementation-from-stl-containers-rather-than-delegate) – boycy