вектор к ошибке сегментации строки

#c

#c

Вопрос:

пытаюсь инициализировать строку из вектора. Я должен получить «привет» в качестве выходных данных. но я получил «ошибку сегментации». что я сделал не так?

 //write a program that initializes a string from a vector<char>
#include <iostream>
#include <vector>
#include <string>
using namespace std;
int main ()
{
    vector<char> cvec;
    cvec[0]='h';
    cvec[1]='e';
    cvec[2]='y';
    string s(cvec.begin(),cvec.end());
    cout<<s<<endl;
    return 0;
}
  

Комментарии:

1. Добавить к ответу Mysticial — cvec[0] (и другие обращения) не вызывает проверку границ, и в вашем векторе нет элементов, поэтому вы обращаетесь к некоторой части памяти, которая вам еще не выделена.

Ответ №1:

Класс vector начинается с нулевого размера (по умолчанию). Таким образом, это приведет к неопределенному поведению. (в вашем случае ошибка сегментации)

Вместо push_back() следует использовать:

 vector<char> cvec;
cvec.push_back('h');
cvec.push_back('e');
cvec.push_back('y');
  

Это добавит каждый из них char к вектору.

Комментарии:

1. спасибо, сработало. или я должен объявить это с инициализатором. «вектор<char> cvec(1);»

2. Если вы используете push_back() , все нормально так, как есть. Вам не нужен инициализатор.

3. Если вы хотите использовать вектор в качестве строки в стиле C, вы можете добавить cvec.push_back(0); , чтобы добавить завершающий нулевой символ.

Ответ №2:

Вам нужно выделить пространство в векторе, вот так:

 vector<char> cvec(3);
  

Или вставляйте символы один за другим:

 vector<char> cvec;
cvec.push_back('h');
cvec.push_back('e');
cvec.push_back('y');