gpt4 book ai didi

c++ - IntSetLIst 的实现

转载 作者:行者123 更新时间:2023-11-28 08:27:48 24 4
gpt4 key购买 nike

这里是 C++ 中的 IntSetList 实现

#include <iostream>
using namespace std;

class IntSetList{

private:
int n;
struct node{

int val;
node *next;
node(int v,node *p){val=v;next=p;}
};
node *head,*sentinel;
node *rinsert(node *p,int t){

if (p->val<t){
p->next=rinsert(p->next,t);


}
else if (p->val>t){
p=new node(t,p);
n++;
}
return p;
}



public:
IntSetList(int maxelens,int maxval){
sentinel=head=new node(maxval,0);
n=0;
}



int size() { return n;}

void insert(int t){ head=rinsert(head,t);}
void report(int *v){

int j=0;
for (node *p=head;p!=sentinel;p=p->next)
v[j++]=p->val;



}




void display (int *v){
for (int i=0;i<sizeof(v)/sizeof(v[0]);i++){
cout<<v[i];
}





}

};

int main(){



IntSetList s(10,15);
int v[10];
s.insert(7);
s.insert(2);
s.insert(1);
s.insert(11);
s.insert(13);
s.insert(14);
s.insert(5);
s.insert(6);
s.insert(12);
s.insert(9);
s.report(v);

s.display(v);






return 0;
}

但它没有向我显示任何输出当然有 C++ 标准库,但我需要自己实现,所以我正在练习请帮忙什么是错的?

最佳答案

完全没有输出?我怀疑它至少输出了一个数字,因为 sizeof(v) 至少和 sizeof(v[0]) 一样大,但可能只是一样大,因为在大多数 32 位计算机上,指针与 int 的大小相同。

sizeof(v)/sizeof(v[0]) 技巧只适用于数组,不适用于指针。解决这个问题的一个常见技巧是将函数声明为模板,因此:

template <int N>
void display (int (&v)[N])
{
for (int i = 0; i < N; ++i)
{
cout << v[i];
}
}

一个更传统的解决方案是显式传递长度:

void display (int *v, int n)
{
for (int i = 0; i < n; ++i)
{
cout << v[i];
}
}

需要注意的几点:

  1. 这会将所有数字混合在一起,因为您没有在它们之间放置任何空格。
  2. display 函数不必是 IntSetList 的成员,因为它根本不与类交互。

顺便说一句,最简单的解决方案是根本不编写函数:

std::copy(v, v + sizeof(v)/sizeof(v[0]), std::ostream_iterator<int>(std::cout));

关于c++ - IntSetLIst 的实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3328168/

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