求一下问题的完整代码

问题描述如图所示,要求使用c++面向对象的程序设计方法,运用析构函数和构造函数

img

必须要用类吗?


#include <iostream>
using namespace std;

class CallSame
{
private:
    int *p;
    int n;
public:
    CallSame() {n=0;}
    CallSame(int *p,int n)
    {
        this->n = n;
        this->p = new int[n];
        for(int i=0;i<n;i++)
            this->p[i] = p[i];
    }
    ~CallSame()
    {
        if(p!=NULL)
        {
            delete []p;
            p = NULL;
        }
    }
    void Call()
    {
        int count = 0,num = 0;
        for(int i=0;i<n-1;i++)
        {
            count = 1;
            if(i!=0 && p[i]==p[0])
                continue;
            for(int j=i+1;j<n;j++)
            {
                if(p[i] == p[j])
                {
                    count++;
                    if(i!=0)
                        p[j] = p[0];
                }
            }
            if(count == 2)
            {
                num++;
                count = 0;
                cout<<p[i]<<" ";
            }
        }
        if(num==0)
            cout<<"none";
    }
};

int main()
{
    int a[20];
    int n;
    cin>>n;
    for(int i=0;i<n;i++)
        cin>>a[i];
    CallSame cs(a,n);
    cs.Call();
    system("pause");
    return 0;
}

您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 帮你找了个相似的问题, 你可以看下: https://ask.csdn.net/questions/7662771
  • 你也可以参考下这篇文章:基于邻接矩阵存储的图的广度优先搜索遍历算法的实现(附C++实现代码)
  • 除此之外, 这篇博客: 【C++后台开发面经】面试总结第八波:整个知识的查漏补缺中的 进程切换与线程切换的代价比较 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:

    进程切换分两步:

    1)切换页目录以使用新的地址空间;2)切换内核和硬件上下文。

    切换的性能消耗:1)线程上下文切换和进程上下文切换一个最主要的区别是线程的切换虚拟内存空间依然是相同的,但是进程切换是不同的。这两种上下文切换的处理都是通过操作系统内核来完成。内核的这种切换过程伴随的最显著性能损耗是将寄存器中的内容切换出。2)另外一个隐藏的损耗是上下文的切换会扰乱处理器的缓存机制。简单的说,一旦去切换上下文,处理器中所有已经缓存的内存地址一瞬间都作废了,还有一个显著的区别是当你改变虚拟内存空间的时候,处理的页表缓冲,这将导致内存的访问在一段时间内相当的低效。但是在线程的切换中,不会出现这个问题。 

    为什么虚拟地址切换很慢
    现在我们已经知道了进程都有自己的虚拟地址空间,把虚拟地址转换为物理地址需要查找页表,页表查找是一个很慢的过程,因此通常使用Cache来缓存常用的地址映射,这样可以加速页表查找,这个cache就是TLB,Translation Lookaside Buffer,我们不需要关心这个名字只需要知道TLB本质上就是一个cache,是用来加速页表查找的。由于每个进程都有自己的虚拟地址空间,那么显然每个进程都有自己的页表,那么当进程切换后页表也要进行切换,页表切换后TLB就失效了,cache失效导致命中率降低,那么虚拟地址转换为物理地址就会变慢,表现出来的就是程序运行会变慢,而线程切换则不会导致TLB失效,因为线程线程无需切换地址空间,因此我们通常说线程切换要比较进程切换块,原因就在这里。

    int recv(socket s,char *buf,int len,int flags);

    接收端套接字描述符、缓冲区用来存储recv函数接收到的数据、buf的长度、0

    返回值:<0 出错、=0连接关闭、>0接收到数据大小。若没有数据,则recv会一直等。

    阻塞模式下recv会一直阻塞直到接收到数据,非阻塞模式下如果没有数据就会返回,不会阻塞着读,因此需要循环读取。

    int send(socket s,char* buf,int len,int flags)

     返回值:<0 出错、=0 连接关闭、>0表示发送的字节数

    ps -aux 查看进程PID

    lsof -p 1430:可以获取打开的文件信息,类型、大小、节点信息等

    ll proc/1430/fd:查看打开的文件描述符

    netstat -nap | grep PID

  • 您还可以看一下 林男老师的小学生c++趣味编程入门视频教程 少儿C十十信息学奥赛竞赛网课课程中的 一见如故——函数小节, 巩固相关知识点

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^