Передача векторного указателя в качестве параметра в c ++

0

Я попытался передать вектор указателя на функцию insertVector. Так как я не знаю размер массива вектора в основной функции, я создаю массив векторного объекта в функции insertVector. И у меня появилось сообщение об ошибке "Ошибка шины (core dumped)". Она работоспособна, когда я новичок в следующем виде в главной функции. Что я здесь делаю неправильно? вектор * ivec = новый вектор [5]; Я ожидаю такого результата. индекс: 0 тест haha index: 1 тест haha index: 2 теста haha index: 3 теста haha index: 4 test haha

        #include<iostream>
        #include<cstring>
        #include<vector>
        using namespace std;

        int insertVector(vector<string> *input)
        {
           int size = 5;
           input = new vector<string>[size];

           for(int k=0; k < size; k++)
           {
              (*input).push_back("test");
              for(int j=0; j<1; j++)
              {
                (*input).push_back("haha");
              }
              input++;
           }
           return size;
        }

        int main()
        {
           vector<string>* ivec;
           int i = insertVector(ivec);

           for(int iy = 0; iy < i; ++iy)
           {
              vector<string>:: iterator iter = ivec[iy].begin();
              cout << "index:" << iy << endl;
              for(int ix = 0; iter != ivec[iy].end(); ++iter, ++ix)
              {
                  cout << *iter << endl;
              }
           }

           return 0;
        }
  • 1
    Это использование указателей - то, как программы C обычно пишутся. Почему бы не передать вектор по ссылке?
  • 1
    Отслеживание размера контейнера также пахнет программированием на Си. Знаете ли вы, что vector неявно знает свой собственный размер? Вы не должны отслеживать это.
Показать ещё 2 комментария
Теги:
vector

2 ответа

0
Лучший ответ

Попробуй это:

void AllocateVector(std::vector<int> **pIntVector)
{
    *pIntVector = new std::vector<int>[10];
    (*pIntVector)->push_back(10);
    (*pIntVector)->push_back(20);
}

int _tmain(int argc, _TCHAR* argv[])
{
    std::vector<int> *tmpIntVector;
    AllocateVector(&tmpIntVector);
}
0

Пытаться

     vector<string> ivec;

как отправную точку и изменить код, чтобы отразить это изменение.

Вы не выделяете vector объект. ivec в вашем коде - это указатель на нет.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню