gpt4 book ai didi

c++ - 如何修复C++ vector 运算中的错误?

转载 作者:行者123 更新时间:2023-11-30 04:48:15 25 4
gpt4 key购买 nike

类 MapSquare 中的 f() 函数正常工作。当我添加另一个类 MapTriple 时,它​​不工作。 MapSquare 中的 f() 函数应计算 vector 中元素的平方,而 MapTriple 中的 f() 函数应将所有元素乘以 3。

MapGeneric 是包含函数 map() 的基类,它是一个访问 vector 元素的递归函数,而 f() 函数是一个纯虚函数。

MapSquare 和 MapTriple 是两个派生类,它们重写 f() 函数以计算 vector 元素的平方并将 3 与所有 vector 元素相乘。

MapSquare 工作正常...但是当我添加 MapTriple 时,出现段错误。请帮忙解决这个问题。

#include<vector>
#include<iostream>
#include<cstdlib>
#include<stdio.h>
#include<stdlib.h>
using namespace std;

class MapGeneric
{
public:
virtual int f(int){};
vector<int> map(vector<int>, int);
};
class MapSquare:public MapGeneric
{
public: int f(int);

};
class MapTriple:public MapGeneric
{
public: int f(int);
};
class MapAbsolute:public MapGeneric
{
public: int f(int);
};
vector<int> MapGeneric::map(vector<int> v, int index)
{

if(index>=1)
{
v[index]=f(v[index]);
return map(v,index-1);
}
return v;

}
int MapSquare::f(int x)
{
return x*x;
}
int MapTriple::f(int x)
{
return 3*x;
}
int MapAbsolute::f(int x)
{
return abs(x);
}
int main()
{
//mapping square
MapSquare ob;
vector<int> L,L1,L2;
for (int i = 1; i <= 5; i++)
L.push_back(i);
L1=ob.map(L,sizeof(L));
cout<<"Square = ";
for ( vector<int>::iterator i = L1.begin(); i != L1.end(); ++i)
cout << *i<<" ";

//mapping triple
MapTriple t;

L2=t.map(L,sizeof(L));
cout<<endl<<"Triple = ";
for(vector<int>::iterator i=L2.begin();i!=L2.end();++i)
cout<<*i<<" ";

return 0;
}

最佳答案

这里有很多问题。您似乎认为 C++ 索引从 1 而不是 0 开始?

if(index>=1)
{
v[index]=f(v[index]);
return map(v,index-1);
}

对我来说,这立即看起来是错误的,你的意思肯定是:

// use size_t for indices (which cannot be negative)
vector<int> MapGeneric::map(vector<int> v, size_t index)
{
// make sure the index is valid!
if(index < v.size())
{
v[index] = f(v[index]);
return map(v, index - 1);
}
return v;
}

其次,sizeof() 运算符没有达到您的预期!!它返回 std::vector 的大小(在 64 位系统上通常是 24 字节——基本上是 3 个指针)。您应该使用 size() 方法来确定数组的长度。

// remember that indices are zero based, and not 1 based!
L1=ob.map(L, L.size() - 1);

关于c++ - 如何修复C++ vector 运算中的错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55931419/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com