Чтобы использовать оператор [] для доступа к элементам, вы должны сделать это для объекта, а не указателя на объект.
Постарайтесь;
(*vec)[x];
* 1006 Е.Г. *
for (int i = 0; i < vec->size(); i++)
{
printf("Value at %d is %d\n", i, (*vec)[i]);
}
Обратите внимание, что при вызове функций для указателя вы обычно используете оператор -> вместо оператора . , но вы можете легко сделать (* vec) .some_func (); вместо этого.
Операторы, такие как [], -, ++ и т. Д., Могут действовать как на объекты, так и на указатели. С объектами они действуют как вызовы функций, но с указателями они действуют как математические операции над адресом.
Например;
pointer[nth];
*(pointer + nth);
Имеют точно такой же эффект - они возвращают n-й объект с начала указателя. (обратите внимание на расположение * во втором примере, оно называется после смещения применяется.
Два других совета;
Вы также можете избежать необходимости разыменования, передавая вектор как ссылку, а не как указатель. Это не всегда подходящий вариант, но он приводит к более чистому коду.
void my_func(std::vector<int>& vector)
{
// vector can then be used as a regular variable
}
Если вы собираетесь многократно передавать векторы определенного типа в функции, то вы можете использовать typedef как для ясности, так и для экономии при наборе текста.
typedef std::vector<int> IntVector;
void my_func(IntVector& vector)
{
}