向量函数“push_back”继续将值重写到内存中的同一个插槽

时间:2015-09-30 04:09:04

标签: c++ vector push-back

std :: vector的push_back方法没有将第二个控制台输入放在v [1]槽中,它会在v [0]

中覆盖它

我试图寻找其他答案,但代码和答案对我来说太复杂了,我试图保持简单(但我尝试使用指针,只是有一堆错误)

我的方法:

      vector<string> createtable(std::vector<std::string> v, std::string insertedstr) {
        std::vector<std::string> vcreate;
        vcreate.push_back(insertedstr + " ");

            return vcreate;
}

主要

                   int main()
                {
                    int option;
                    std::string insertedstr;
                    std::vector<std::string> v;
                cin >> insertedstr;
                   v = createtable(v, insertedstr);

                for (int i = 0; i <=v.size(); i++) {
                    cout << v[i] << endl;
        }
        cin >> insertedstr;
   v = createtable(v, insertedstr);
            for (int i = 0; i <= v.size(); i++) {


    cout << v[i] << endl;
    }
        return 0;

        }

编辑:我想最终为此编写一个菜单,所以我想拥有无限量的push_backs,所以只是在main中调用v.push_back对我不起作用

如果有人能提供帮助,会很棒。

3 个答案:

答案 0 :(得分:2)

您在每次调用vector时都会创建新的createTable,而不会重复使用现有的vector;你没有经常插入v[0],你不断用一个只有一个元素的全新向量替换v。第二次拨打createTable可能只是直接拨打v.push_back(insertedString);

或者,删除vcreate声明并实际使用传递给函数的v(这仍然是浪费,因为它不断复制和替换vector而不是推送到现有的,但它至少在逻辑上是正确的。)

答案 1 :(得分:1)

你永远不会真正把第二个输入写入任何东西。 Push_back只被调用一次(在v = createtable(v, insertedstr);调用的函数内),因此它只包含一个值。你需要实际调用带有第二个值的push_back进入向量。

答案 2 :(得分:0)

vector<string> createtable(std::vector<std::string> v, std::string insertedstr) {
    //std::vector<std::string> vcreate; // Not required
    v.push_back(insertedstr + " ");

    return v;
}

问题出在这个功能上。您每次都在创建新的向量vcreate,而不是使用传递的向量v。因此,每次都会有大小为1的新向量。