#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');