Trong đoạn mã dưới đây, kích thước của hàm (foo) đối số (std::vector
) có thể là bất cứ điều gì để làm cho hàm thành một hàm chung. Tuy nhiên, đôi khi kích thước container được biết đến như vậy std :: mảng có thể được sử dụng. Vấn đề là chuyển đổi std::array
thành std::vector
. Cách tốt nhất để giải quyết vấn đề này là gì? Có tốt hơn khi chỉ sử dụng std::vector
trong trường hợp này không?Chuyển đổi std :: mảng thành std :: vector
#include <iostream>
#include <array>
#include <vector>
using namespace std;
// generic function: size of the container can be anything
void foo (vector<int>& vec)
{
// do something
}
int main()
{
array<int,3> arr; // size is known. why use std::vector?
foo (arr); // cannot convert std::array to std::vector
return 0;
}
Tôi giả định rằng 'foo' sửa đổi vectơ vì nó mất bởi tham chiếu có thể thay đổi, đúng không? Điều đó sẽ rất phù hợp với câu trả lời. –
Bây giờ bạn sẽ phải làm việc xung quanh nó, nhưng trong tương lai chúng tôi sẽ viết một cái gì đó như 'void foo (RangeOf &);' và nó sẽ có bất kỳ loại phạm vi 'int'. –
Vấn đề này là lý do tại sao thư viện chuẩn luôn có các trình vòng lặp 'bắt đầu' và' cuối'. Bằng cách đó, nó không quan tâm bạn sử dụng container nào. –