JohnnyG62 Ответов: 2

Вставка строки в строковый вектор


Вот код, который я пытаюсь скомпилировать. Я получаю эту ошибку:
нет соответствующей функции для вызова ‘std:: vector< std:: basic_string< char> >:: insert(int, const char [2])’

на этой линии

dataDictionaryEntryFieldsId. insert(2,"B");

Что я делаю не так?

#include "main.hpp"
#include "vector"

using namespace std;

int test(void)
{

vector<string>dataDictionaryEntryFieldsId;

dataDictionaryEntryFieldsId.push_back("A");
dataDictionaryEntryFieldsId.push_back("C");

dataDictionaryEntryFieldsId.insert(2,"B");
}


Что я уже пробовал:

Я попробовал использовать строковую переменную вместо "B", и это тоже не сработало

enhzflep

Первый параметр для insert на самом деле это итератор, а не целое число. Поэтому, если вы хотите добавить "B" после других 2 элементов, вы можете вместо этого использовать:
dataDictionaryEntryFieldsId.insert(dataDictionaryEntryFieldsId.end(),"B");

[no name]

Этого было бы достаточно для ответа с небольшой детализацией.

2 Ответов

Рейтинг:
16

CPallini

Как было предложено энхзфлеп, это первый параметр, который не подходит.
Попробуй

#include <vector>
#include <string>
#include <iostream>

using namespace std;

int main()
{
  vector< string > v;
  v.push_back("A");
  v.push_back("C");

  vector< string >::iterator it = v.begin() + 1;
  v.insert( it, "B");

  for (size_t n=0; n<v.size(); ++n)
    cout << v[n] << endl;

}



или, используя C++11

#include <vector>
#include <string>
#include <iostream>

using namespace std;

int main()
{
  vector< string > v;

  v.push_back("A");
  v.push_back("C");

  auto it = v.begin() + 1;
  v.insert( it, "B");

  for (const auto & x : v)
    cout << x << endl;
}


JohnnyG62

Я попробовал предложение не c++11, и это отлично сработало ! Теперь я пытаюсь удалить строку из вектора.
Например:
V. удалить (его);

но получите эту ошибку компиляции
'class std:: vector< std:: basic_string< char> >' не имеет члена с именем ‘remove’

Рейтинг:
11

JohnnyG62

Я обнаружил, что стирание работает

it=v.begin() + 1;
   v.erase(it);