У вас есть указатель на вектор, потому что вы так его кодировали? Вы можете пересмотреть это и использовать (возможно, постоянную) ссылку. Например:
#include <iostream>
#include <vector>
using namespace std;
void foo(vector<int>* a)
{
cout << a->at(0) << a->at(1) << a->at(2) << endl;
// expected result is "123"
}
int main()
{
vector<int> a;
a.push_back(1);
a.push_back(2);
a.push_back(3);
foo(&a);
}
Хотя это допустимая программа, общий стиль C ++ - передавать вектор по ссылке, а не по указателю. Это будет столь же эффективно, но тогда вам не придется иметь дело с, возможно, нулевыми указателями, распределением / очисткой памяти и т. Д. Используйте ссылку const, если вы не собираетесь изменять вектор, и ссылку не const, если вам нужно внести изменения.
Вот справочная версия вышеуказанной программы:
#include <iostream>
#include <vector>
using namespace std;
void foo(const vector<int>& a)
{
cout << a[0] << a[1] << a[2] << endl;
// expected result is "123"
}
int main()
{
vector<int> a;
a.push_back(1);
a.push_back(2);
a.push_back(3);
foo(a);
}
Как вы можете видеть, вся информация, содержащаяся в a, будет передана функции foo, но она не будет копировать совершенно новое значение, так как оно передается по ссылке. Поэтому он так же эффективен, как и передача по указателю, и вы можете использовать его как обычное значение, вместо того, чтобы разбираться, как использовать его в качестве указателя или как разыменовывать его.