2013-11-25 3 views
-2

Я хочу создать вектор строки внутри функции и выделить память для нее в куче. Для этого я используюИспользование push_back для вектора, выделенного на куче

vector<string>* residuetable = new vector<string>();

Когда я затем попытаться сделать

&residuetable.push_back(modulo((exponentiate("2", exponent02)), modulus));

т.е. попытаться добавить возвращаемое значение из нескольких вызовов функций к вектору с помощью функции push_back, я получаю время компиляции ошибка

request for member 'push_back' in 'residuetable', which is of non-class type 'std::vector<std::string, std::allocator<std::string> >*

Как я могу решить эту проблему и добавить результат вызовов функций в конце вектора, выделенного в куче?

+0

Вместо этого разыщите указатель с помощью '* residuetable' (то есть, если вы хотите сохранить синтаксис точки). –

+3

@ChrisO: Или даже лучше, '** & остаточный', чтобы сохранить текущий код :-) –

+0

@KerrekSB, я стою исправлено. –

ответ

4

Использование -> для доступа к членам класса через указатель:

residuetable->push_back(...); 

Тогда подумайте еще раз о том, действительно ли вы хотите, чтобы возиться с new вообще. Я совершенно уверен, что вы этого не сделаете.

+0

Я не уверен, что понимаю. Если я хочу выделить память в куче, каким другим способом я буду использовать вместо 'new'? Я понимаю, что большие массивы данных, такие как массивы, обычно должны выделяться в куче. –

+0

@ToshioYamaguchi: Дело в том, что вы не должны динамически выделять векторы _at all_, как правило. –

+0

@ToshioYamaguchi: вектор выделяет свой массив на куче - это его цель. Вы, вероятно, не хотите, чтобы вектор был в куче, если только вы не делаете с ним что-то необычное. Если у вас есть веская причина для этого, тогда идите вперед и делайте это; но подумайте, действительно ли это то, что вы хотите. –

1

Вы хотите: residuetable->push_back("foo");

1

Вы использовали & вместо * и (*a).b таких же, как a->b:

residuetable->push_back("foo"); 

Но в целом мы не динамически выделять контейнеры, поскольку есть более эффективные способы управления данными.

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