push_back struct into vector

时间:2016-04-26 11:59:43

标签: c++ vector push-back

 //prototype    
 void Split(char c, vector <MyString> &outputVector) const           

 //partial code inside split function
 // create new MyString object to push into output vector
 MyString substr;
 substr.mString = newString;
 substr.mLength = size;

 // push new item
 outputVector.push_back(substr);

在我跳过outputVector.push_back()行后,mString数据成员不会被保留。

//I have two constructors
MyString()
{
    mString = NULL;
    mLength = 0;
}

/*************************************************
 * MyList copy constructor
 * creates a deep copy of a MyString item
 ************************************************/
MyString(const MyString &copy)
{
    mString = new char[copy.mLength];
    int i;

    for(; i < copy.mLength; i++)
    { mString[i] = copy.mString[i]; }

    mString[i] = '\0';
    mLength = copy.mLength;

}

enter image description here

4 个答案:

答案 0 :(得分:6)

您正在使用未初始化的变量undefined behavior

int i;

for(; i < copy.mLength; i++)

此处我们不知道i是什么,所以任何事情都可以进行,但很可能i大于copy.mLength所以我们永远不会进入for循环。为了获得正确的行为,请将i设置为0,如

int i = 0;

还有另一个问题
mString[i] = '\0';

当我们到达那一行i == copy.mLength时,但是数组的大小只有copy.mLength所以我们是一个结束,因为数组是基于0索引的。您很可能需要将分配更改为

mString = new char[copy.mLength + 1]; 

为空终止符提供空间。

答案 1 :(得分:0)

http://www.cplusplus.com/reference/vector/vector/push_back/

push_back将值复制到vector。 MyString类是否有正确定义的复制构造函数,复制mString成员?我猜这可能是你的问题。

答案 2 :(得分:0)

我认为有2个错误,你已经完成了 1.for(i; i&lt; copy.mLength; i ++)     {mString [i] = copy.mString [i]; } 你必须提到,循环将从何处开始。 2.mString = new char [copy.mLength + 1]; mString [i] ='\ 0'; 我想,你得到了答案:)

答案 3 :(得分:-1)

正确版本的复制构造函数

MyString(const MyString &copy)
{
    mString = new char[copy.mLength + 1];
    int i = 0;

    for(; i < copy.mLength; i++)
    { mString[i] = copy.mString[i]; }

    mString[i] = '\0';
    mLength = copy.mLength;

}