2013-05-14 3 views
3

Я получил от std::vector<int> (я знаю, что не должен, но я просто хотел проверить его). Теперь я могу создать его экземпляр и назначить несколько значений:Производный вектор: Выполнять операции

MyVector v(5); 
v[0]=3; 

Я даже могу вернуть значение:

cout << v[0]; 

Но как я могу получить доступ к значению (ы), если я хочу сделать некоторые операции в рамках класс? Что-то вроде:

int func(int a){ 
    return this->[0] + a; // EXAMPLE 
} 
+1

'return (* this) [0] + a;' должен работать. – didierc

+4

'(* this) [0]', 'this-> operator [] (0)', 'this-> at (0)': обратите внимание, что последний проверяет и бросает за пределы. –

+1

@ThePhD: 'operator [] (0)' и 'at (0)' работают без 'this->'. –

ответ

3

Как указано в комментариях под вопросом:

возвращения (* это) [0] + а; должно сработать. - didierc 5 часов назад

Кроме того, поскольку vector выкладывает память линейным способом (например, массив), вы также можете получить доступ к памяти, которая хранит значения через указатель, например так:

int *ptr = &(*this)[0]; 
// read an integer from the console into the 3rd element of the vector 
scanf("%d", ptr + 2); 

Это может быть полезно, если у вас есть vector символов, и вам нужно передать char* на что-то вроде функции строки, например.

Будем предупреждать, однако, vector<bool> не ведет себя одинаково (булевские значения хранятся внутри битпотоков, а не массива bools, см. http://isocpp.org/blog/2012/11/on-vectorbool).

Смежные вопросы