W poniższym kodzie rozmiar argumentu function (foo) (std::vector
) może być dowolny, aby funkcja była ogólna. Jednak czasami pojemnik wielkości jest znany, więc można użyć std :: array. Problem polega na przekonwertowaniu modelu std::array
na std::vector
. Jaki jest najlepszy sposób na rozwiązanie tego problemu? Czy w takim przypadku lepiej jest zawsze używać std::vector
?Konwersja std :: array na 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;
}
Zakładam, że 'foo' modyfikuje wektor, ponieważ przyjmuje on zmienną referencję, czy to prawda? To będzie bardzo istotne dla odpowiedzi. –
Na razie będziemy musieli to obejść, ale w przyszłości napiszemy coś w stylu 'void foo (RangeOf &);' i zajmie to dowolny zakres 'int's. –
Ten problem powoduje, że standardowa biblioteka zawsze pobiera iteratory 'begin' i' end'. W ten sposób nie obchodzi się, z którego kontenera korzystasz. –