Есть еще один способ, вы можете использовать ссылку на объект:
#include <iostream>
#include <vector>
using namespace std;
int main()
{
vector<int> v = {7};
vector<int> *p = &v;
// Reference to the vector
vector<int> &r = *p;
cout << (*p)[0] << '\n'; // Prints 7
cout << r[0] << '\n'; // Prints 7
return 0;
}
Таким образом, r
совпадает с v
, и вы можете заменить все вхождения (*p)
на r
.
Предупреждение: Это будет работать только в том случае, если вы не измените указатель (то есть измените, на какой объект он указывает).
Примите во внимание следующее:
#include <iostream>
#include <vector>
using namespace std;
int main()
{
vector<int> v = {7};
vector<int> *p = &v;
// Reference to the vector
vector<int> &r = *p;
cout << (*p)[0] << '\n'; // Prints 7
cout << r[0] << '\n'; // Prints 7
// Caveat: When you change p, r is still the old *p (i.e. v)
vector<int> u = {3};
p = &u; // Doesn't change who r references
//r = u; // Wrong, see below why
cout << (*p)[0] << '\n'; // Prints 3
cout << r[0] << '\n'; // Prints 7
return 0;
}
r = u;
неверно, потому что вы не можете изменить ссылки:
Это изменит вектор, на который ссылается r
(v
)
вместо ссылки на другой вектор (u
).
Итак, опять же, это работает, только если указатель не изменится при использовании ссылки.
В примерах C ++ 11 нужен только из-за vector<int> ... = {...};