所以我使用成员函数“insert”创建这个类,从字符串数组复制到类内容,这是一个矢量数组。
这个中止错误不断弹出说我要经过Vector结束,但我不明白为什么......
以下是代码:
/////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////// Map class /////////////////////
class Map
{
private:
/////////////////////////////////////////// Map Variables ///////////////
string _name;
vector <string> _contents;
public:
Map(string name){_name = name;
_contents.reserve(56);};
~Map(){};
string getName()
{
return _name;
};
vector <string> getContents()
{
return _contents;
};
/////////////////////////////////////////// Insert ////////////////////////
// string* to an array of 56 strings;
bool Insert(string* _lines_)
{
for (int I = 0; I < 3; I++)
{
_contents[I] = _lines_[I];
}
return true;
};
};
如果您需要更多信息,请询问!的谢谢!
答案 0 :(得分:8)
实际上,您不需要自己复制它们。您可以使用std::vector::assign
将c-style array
转换为std::vector
。
<强>矢量::分配强>
将新内容分配给矢量对象,在调用之前删除矢量中包含的所有元素,并将它们替换为参数指定的元素。
示例强>
string sArray[3] = {"aaa", "bbb", "ccc"};
vector<string> sVector;
sVector.assign(sArray, sArray+3);
^ ok, now sVector contains three elements, "aaa", "bbb", "ccc"
更多详情
答案 1 :(得分:2)
将std::copy
用作:
#include <algorithm> //for std::copy
#include <iterator> //for std::back_inserter
std::copy(_lines_, _lines_ + count, std::back_inserter(_contents));
其中count
是数组中字符串的总数。如果字符串总数为56
,则count
应为56
,而不是55
(如果您希望将所有字符串都复制到_contents
)。
答案 2 :(得分:1)
矢量没有大小(只有一些空格reserve
ed。)
您必须resize()
向量,或使用push_back()
添加新元素。
答案 3 :(得分:1)
您应该在使用subscript []运算符添加任何元素之前调整vector <string> _contents
的大小。
另外:提供Map类的默认构造函数。
答案 4 :(得分:1)
_name
:Map(string name) : _name(name) {
_contents
有足够的容量容纳56个元素但没有实际元素。您应该调整它的大小(_contents.resize(56);
),在Insert
方法(_contents.push_back(_lines_[I]);
)中添加元素,或者使用足够的容量构建它(将, _contents(56)
添加到初始化列表中)。答案 5 :(得分:0)
现在更简单了。 (C ++ 11)
string sArray[3] = {"aaa", "bbb", "ccc"};
vector<string> sVector (sArray, sArray + 3);
无需复制,需要分配。