【问题标题】:error while pushing back pointer vector elements to non pointer vector c++将指针向量元素推回非指针向量c ++时出错
【发布时间】:2021-10-14 18:36:17
【问题描述】:

当输入字的大小大于或等于 5 但它没有发生时,我试图通过下面的函数 full 中的循环将指针向量 ptrVctor 的元素推回非指针向量 myvector2。当我输入少于 5 个单词时,程序运行良好。但是当我输入超过 5 个单词时,程序并没有按预期运行,而是终止了。

Main.hpp:

#ifndef WORDS_WORDS1_H
#define WORDS_WORDS1_H

#endif //WORDS_WORDS1_H

#include <iostream>
#include <string>
#include <unistd.h>
#include <vector>
#include <algorithm>

using namespace std;
template <class T>
class MyVector {
public:
    void full(int i){
        if (i >= 5) {//

            for (int j=0; j<ptrVctor->size(); j++){
                myvector2.push_back((*ptrVctor)[j]);//has problem
            }
            delete ptrVctor;
            ptr_cout++;
        }
    }
    void setItems2( T &a){
        if (ptr_cout==0){
            ptrVctor->push_back(a);
        }
        else{
            myvector2.push_back(a);
        }
    }

    int getUsed2 (){
        if (ptr_cout==0)
            return ptrVctor->size();
        else
            return myvector2.size();
    }
    void setUsed2 (int a){
        used2 = a;
    }
private:
    int used2 =0;
    int ptr_cout =0;
    vector<T>* ptrVctor = new vector<T>();
    vector<T> myvector2;
};

Main.cpp:

#include "main.hpp"
int main()
{
    MyVector<string> v;
    int count = 0;
    string word;
    while (cin >> word) {

        count += 1;
        v.setUsed2(count);
        v.setItems2(word);
        v.full(count);
    }
    cout << "Total: " << v.getUsed2() << '\n';
    return 0;
}

【问题讨论】:

  • 您在任何函数之外都有一个循环 - 这是不允许的
  • 公共循环???大声笑
  • 错误信息是什么?答案可能已经出现在您的屏幕上。
  • 你熟悉consturctor这个概念吗?
  • 为什么?你正在做一些奇怪的事情。你能解释一下这样做的理由是什么?

标签: c++ c++11 pointers vector


【解决方案1】:

当你输入5时,在函数int full(int i )中,你的程序会删除ptrVctor

当您随后输入6 时,ptrVctor 已被删除,但您使用的是ptrVctor-&gt;size(),所以它就终止了。

【讨论】:

    【解决方案2】:

    myvector2 是一个实例变量而不是静态变量。这意味着您不能在不创建 MyVector 的实例的情况下初始化或修改该变量。

    您应该在方法或构造函数中执行for 循环指令。我建议您学习并澄清您对类及其实例如何工作的概念。

    【讨论】:

    • 对不起。实际上代码很大,循环在一个函数中。错误地,我只是复制了没有该功能的 for 循环。已编辑问题并在其中包含功能。
    猜你喜欢
    • 1970-01-01
    • 2010-10-13
    • 2011-03-12
    • 2020-04-13
    • 2013-04-14
    • 1970-01-01
    • 1970-01-01
    • 2011-08-04
    • 1970-01-01
    相关资源
    最近更新 更多