将指针向量元素推回非指针向量c ++时出错
Posted
技术标签:
【中文标题】将指针向量元素推回非指针向量c ++时出错【英文标题】:error while pushing back pointer vector elements to non pointer vector 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这个概念吗? 为什么?你正在做一些奇怪的事情。你能解释一下这样做的理由是什么? 【参考方案1】:当你输入5
时,在函数int full(int i )
中,你的程序会删除ptrVctor
。
当您随后输入6
时,ptrVctor
已被删除,但您使用的是ptrVctor->size()
,所以它就终止了。
【讨论】:
【参考方案2】:myvector2
是一个实例变量而不是静态变量。这意味着您不能在不创建 MyVector
的实例的情况下初始化或修改该变量。
您应该在方法或构造函数中执行for
循环指令。我建议您学习并澄清您对类及其实例如何工作的概念。
【讨论】:
对不起。实际上代码很大,循环在一个函数中。错误地,我只是复制了没有该功能的 for 循环。已编辑问题并在其中包含功能。以上是关于将指针向量元素推回非指针向量c ++时出错的主要内容,如果未能解决你的问题,请参考以下文章
C ++将向量传递给函数:引用与指针,哪个是首选? [复制]