2016-04-15 3 views
-5

Я хочу знать, что такое версия массива указателей для pushback. Я использовал вектор и переключился на указатели, указывающие на массив. Это мой первый вопрос о stackoverflow. Извините, если это не очень приятно. Я просмотрел требования к сообщениям.C++ - Что такое версия указателя temp.pushback (temp [i])?

int * Ac::allMatches(string prefix) { 
    int* temp; 
    int pos1, pos2; 

    BinarySearch(prefix, pos1, pos2); 

    for (int i = pos1; i < pos2; i++) { 
     temp.push_back(terms[i]); // Getting an error here in Xcode saying 
            // "Member reference base type int* is not a 
            // structure or union" 
    } 

    return temp; 
} 
+0

Нет такой функции из коробки. Если вы не хотите использовать 'std :: vector', вам нужно сворачивать самостоятельно. Но я не думаю, что это того стоит. –

+0

Хорошо. Спасибо. Я это рассмотрел. –

ответ

1

Я хотел бы знать, что версия массив указателей для буксировки является

  1. Подсчитать количество элементов, которые вы должны были бы в массиве.
  2. Выделите память для необходимого количества элементов.
  3. Используйте синтаксис индексации массива для доступа и изменения элементов массива.


int * Ac::allMatches(string prefix) { 
    int pos1, pos2; 
    BinarySearch(prefix, pos1, pos2); 

    int size = pos1-pos2; 
    int* temp = new int[size]; 

    for (int i = pos1; i < pos2; i++) { 
     int index = i - pos1; 
     temp[index] = terms[i]; 
    } 

    return temp; 
} 

Что это не дает вам, но std::vector делает это размер массива и автоматическое управление памятью.

Вам будет лучше использовать std::vector. Накладные расходы при использовании std::vector несущественны, пока вы получаете важную функциональность.

+0

Спасибо. Я попробовал, но это не сработало. Сейчас я работаю над этим. –

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