我正在尝试制作矢量扩展标头。其中一个函数将向量设置为控制台输入(cin)。它使用以下代码:
vector<char> cveccin(){
string cinval;
cin>>cinval;
vector<char> creader;
for (int i=0; i<cinval.size(); i++) {
creader[i]=cinval[i];
}
return creader;
}
我在测试中使用此功能,它给了我EXC_BAD_ACCESS。这里出了什么问题?
答案 0 :(得分:3)
如果要将元素添加到std :: vector,请使用
vector<char> creader;
creader.push_back( var );
要使用数组表示法,您必须先设置std :: vector
的大小vector<char> creader;
creader.resize ( 10 );
creader[0] = var1;
creader[1] = var2;
答案 1 :(得分:3)
问题是你的矢量大小为零,使用[]不会使它变大。
有一个单行,可以做你想要的。
vector<char> cveccin()
{
string cinval;
cin >> cinval;
return vector<char>(cinval.begin(), cinval.end());
}
该代码创建正确大小的向量,将cinval字符串复制到它,并从函数返回它,所有这些都在一行中。不是C ++的奇妙!
答案 2 :(得分:1)
问题是你创建的creader-vector是空的。因为它不包含任何元素,所以您无法访问或索引任何元素。要解决此问题,您可以使用push_back方法而不是索引和分配。