精华内容
下载资源
问答
  • 下面一道C++习题的疑问,希望大家帮我解决习题: 编写一个类Sequence,在自由存储区中按照升序...需要有足够的内存空间来存储该序列,再要求的内容来填充. 提供show()函数列出该序列,以确保正确创建Sequence对象. 

    下面一道C++习题的疑问,希望大家能帮我解决

    习题:
        编写一个类Sequence,在自由存储区中按照升序存储整数值的递增序列,序列的长度和起始值
    在构造函数中提供.确保该序列至少有两个值,默认10个值,从0开始(0,1,2,3,4,5,6,7,8,9).需要
    有足够的内存空间来存储该序列,再用要求的内容来填充.
        提供show()函数列出该序列,以确保正确创建Sequence对象.
        确保在销毁Sequence对象时,释放分配给序列的内存(注意:确保释放所有的内存!).创建一个
    默认序列和一个随机序列,来演示这个类的操作.


    这是一个控制台应用程序,我创建了两个类和一个main()函数:
        Integer:存储整数值的节点类
        Sequence:序列类

    代码如下:
        Integer类
                                                      Integer头文件
    //Integer.h
     
    #ifndef INTEGER_H
    #define INTEGER_H
    #include <stdlib.h>
    #include <iostream>

    class Integer    //class Integer
    {
    public:
     Integer(int newInt=0,Integer* pNewNext=0);  //元素构造函数
     void setInt(int value,int i);   //设置元素整数值
     int getInt() const;   //获取元素整数值
     void setNext(Integer* pInt);   //设置元素整数值
            Integer* getNext() const;    //获取下一个元素

    private:
     int Int;   //元素整数值
     Integer* pNext;   //指向下一个元素
    };

    inline int random(int count)  //随机函数
    {
     return 1+static_cast<int>(count*rand()/(RAND_MAX+1));
    }

    #endif

                                                       
                                                      Integer源文件
    //Integer.cpp 

    #include "Integer.h"
    #include <iostream>

    using std::cout;

    //构造节点
    Integer::Integer(int newInt,Integer* pNewNext)
    {
     Int=newInt;
     pNext=pNewNext;
    }

    //设置整数值
    void Integer::setInt(int value,int i)
    {
     Int=value;
            Int+=i;
    }

    //获取整数值
    int Integer::getInt() const
    {
     return Int;
    }

    //添加新元素到尾部
    void Integer::setNext(Integer* pInt)
    {
     pNext=pInt;
    }

    //获取下一个元素
    Integer* Integer::getNext() const
    {
     return pNext;
    }

       

     

        Sequence类
                                                             Sequence头文件
    //Sequence.h

    #ifndef SEQUENCE_H
    #define SEQUENCE_H

    #include "Integer.h"

    class Sequence
    {
    public:
     Sequence(int count=10,int startValue=0); //构造函数
     Integer* getFirstInt();   //获取序列第一个元素指针
            Integer* getNextInt();   //获取序列下一个元素指针
     ~Sequence();   //析构函数
     
     void addInt(int value,int i);  //添加序列元素
     void show();   //显示序列

    private:
            int startValue;     //序列起始值
     int count;     //序列元素个数
     Integer* pHead;    //序列头指针
     Integer* pCurrent;   //序列当前指针
     Integer* pTail;   //序列尾指针
    };

    #endif

                                                               Sequence源文件
    //Sequence.cpp  

    #include <iostream>
    #include "Sequence.h"
    #include "Integer.h"

    using std::cout;
    using std::endl;


    //构造序列
    Sequence::Sequence(int count,int startValue)  
    {
     pHead=pCurrent=pTail=0;
     if(count<2)
      count=2;   //个数小于是2,就设置2
     for(int i=0;i<count;i++)
      addInt(startValue,i);   //设置序列及其整数值
     this->count=count;
     this->startValue=startValue;
    }

    //析构
    Sequence::~Sequence()
    {

     cout<<"called"<<endl;//跟踪
     //删除节点
     while(pCurrent=pHead->getNext())//当前指针指向下一个元素
     {
      cout<<"call"<<endl;//跟踪
      delete pHead;//删除节点
      pHead=pCurrent;//头指针指向下一个节点
     }
        delete pHead;//删除最后节点
    }

    //添加节点
    void Sequence::addInt(int value,int i)
    {
     Integer* pInt=new Integer;//创建节点

     if(pHead)//检查序列不为空
     {
      pInt->setInt(value,i);//设置整数值
      pTail->setNext(pInt);//添加节点到尾部
     }
     else//序列为空
     {
      pInt->setInt(value,i);
      pHead=pInt;//设置头节点
     }
     pTail=pInt;//尾指针指向尾部
    }

    //获取序列第一个元素指针
    Integer* Sequence::getFirstInt()
    {
     pCurrent=pHead;
        return pCurrent;
    }

    //获取序列下一个元素指针
    Integer* Sequence::getNextInt()
    {
     if(pCurrent) 
         pCurrent=pCurrent->getNext();//当前指针不为空,指向下一个节点
     else
     {
               pCurrent=pHead;  //当前指针为空, 指向头节点 
     }

         return pCurrent;
    }

    //显示序列
    void Sequence::show()
    {
        int line=0;//每行个数

     pCurrent=pHead;
     do{
      cout<<pCurrent->getInt()<<' ';//输出整数值
            line++;
      if(line%10==0)
       cout<<endl; //个数达到10换行
      pCurrent=pCurrent->getNext();  //指向下一个元素
     }while(pCurrent!=0);

     cout<<endl;//换行
    }


                                                   main()函数

    //main.cpp

    #include <iostream>
    #include <stdlib.h>
    #include <time.h>
    #include <iostream>
    #include "Integer.h"
    #include "Sequence.h"

    using std::cout;
    using std::endl;

    main()
    {
     Sequence list1;//默认序列
     list1.show();//显示list1

     Sequence list2(5,4);//赋值序列
     list2.show();//显示list2

     const int dimlimit=20;
     srand((unsigned)time(0));//随机数种子
     
     Sequence  list3;
     list3=Sequence(random(dimlimit),random(dimlimit));//随机序列
     list3.show();//显示随机序列

            return 0;
    }

    我的问题是为什么main()函数中定义的随机序列lists,也就是上面的这段代码:
            Sequence  list3;
     list3=Sequence(random(dimlimit),random(dimlimit));//随机序列
     list3.show();//显示随机序列
    调用了show()函数后,不能正确释放内存及析构,而前面的list1,list2能正确析构?

     

     

    展开全文
  • 照理说,基因组上的序列应该只有ATCG,以及用来填充gap的N才对,啥会出现Y呢?于是我grep又去搜索了下,出现了更多让我看懂的字符。 离奇现象 为了一探究竟,我展开了一番搜索。由于这个现象知道怎么...
        

    今天运行一个程序的时候,出现了一个让我惊讶的报错,

    2013053-e3629a9290005486.png
    报错

    照理说,基因组上的序列应该只有ATCG,以及用来填充gap的N才对,为啥会出现Y呢?于是我用grep又去搜索了下,出现了更多让我看不懂的字符。

    2013053-187c3f816cb4787d.png
    离奇现象

    为了一探究竟,我展开了一番搜索。由于这个现象不知道怎么描述,于是就随便试试,当然都没有成功。突然脑子闪过一个想法,这不会碱基命名中的用来表示哪些不好判断的序列呀,因为我想到在对基因型分型的时候,如果只能确定这个基因型不是AA,但是有可能是AB,BB,那么就会用另一个字母进行表示。

    于是我想到了IUPAC命名法,最后我找到了下表

    IUPAC nucleotide code Base
    A Adenine
    C Cytosine
    G Guanine
    T (or U) Thymine (or Uracil)
    R A or G
    Y C or T
    S G or C
    W A or T
    K G or T
    M A or C
    B C or G or T
    D A or G or T
    H A or C or T
    V A or C or G
    N any base
    . or - gap

    解决了心中的一个疑问。那么下一个问题就是如何处理这些非ATCGN的字符呢?我当然使用最简单粗暴的方法,就是把RYSWKMBDHV全部替换成N

    tr RYSWKMBDHVryswkmbdhv N < /data/reference/genome/TAIR10/Athaliana.fa  | sed -e 's/>CNN/>Chr/' -e 's/>ChrN/>ChrM/' -e 's/>ChrCN/>ChrCh/'  > r
    ef/Athaliana.fa
    # 由于把Chr也替换成CNN, 因此要替换回来
    
    展开全文
  • 你必须知道的495个C语言问题

    千次下载 热门讨论 2015-05-08 11:09:25
    2.9 为什么不能用内建的==和!=操作符比较结构? 2.10结构传递和返回是如何实现的? 2.11 如何向接受结构参数的函数传入常量值?怎样创建无名的中间的常量结构值? 2.12 怎样从/向数据文件读/写结构? 结构...
  • 2.9 为什么不能用内建的==和!=操作符比较结构?  2.10结构传递和返回是如何实现的? 2.11 如何向接受结构参数的函数传入常量值?怎样创建无名的中间的常量结构值?  2.12 怎样从/向数据文件读/写结构? 结构...
  •  2.9 为什么不能用内建的==和!=操作符比较结构? 2.10结构传递和返回是如何实现的? 2.11 如何向接受结构参数的函数传入常量值?怎样创建无名的中间的常量结构值? 2.12 怎样从/向数据文件读/写结构? 结构...
  • 2.9 为什么不能用内建的==和!=操作符比较结构? 55 2.10 结构传递和返回是如何实现的? 55 2.11 如何向接受结构参数的函数传入常量值?怎样创建无名的中间的常量结构值? 55 2.12 怎样从/向数据文件读/写结构? ...
  • 2.9 为什么不能用内建的==和!=操作符比较结构? 55 2.10 结构传递和返回是如何实现的? 55 2.11 如何向接受结构参数的函数传入常量值?怎样创建无名的中间的常量结构值? 55 2.12 怎样从/向数据文件读/写结构? ...
  • 2.9 为什么不能用内建的==和!=操作符比较结构? 26 2.10 结构传递和返回是如何实现的? 26 2.11 如何向接受结构参数的函数传入常量值?怎样创建无名的中间的常量结构值? 26 2.12 怎样从/向数据文件读/写结构...
  • 《你必须知道的495个C语言问题》

    热门讨论 2010-03-20 16:41:18
    2.9 为什么不能用内建的==和!=操作符比较结构? 26 2.10 结构传递和返回是如何实现的? 26 2.11 如何向接受结构参数的函数传入常量值?怎样创建无名的中间的常量结构值? 26 2.12 怎样从/向数据文件读/写结构...
  • o 7.18 当数组是函数的参数时, 为什么 sizeof 不能正确报告数组的大小 ? * 8. 内存分配 o 8.1 为什么这段代码不行?char *answer; printf("Type something:\n"); gets(answer); printf("You typed \"%s\"\n", ...
  •  2.9 为什么不能用内建的==和!=操作符比较结构?  2.10 结构传递和返回是如何实现的?  2.11 如何向接受结构参数的函数传入常量值?怎样创建无名的中间的常量结构值?  2.12 怎样从/向数据文件读/写结构?  ...
  • 2.9 为什么不能用内建的==和!=操作符比较结构? 2.10 结构传递和返回是如何实现的? 2.11 如何向接受结构参数的函数传入常量值?怎样创建无名的中间的常量结构值? 2.12 怎样从/向数据文件读/写结构? 结构填充 2.13...
  • 2.9 为什么不能用内建的==和!=操作符比较结构? 2.10 结构传递和返回是如何实现的? 2.11 如何向接受结构参数的函数传入常量值?怎样创建无名的中间的常量结构值? 2.12 怎样从/向数据文件读/写结构? 结构填充 2.13...
  • 你必须知道的495个C语言问题(PDF)

    热门讨论 2009-09-15 10:25:47
    2.11 为什么sizeof 返回的值大于结构的期望值, 是不是尾部有填充? . . 9 2.12 如何确定域在结构中的字节偏移? . . . . . . . . . . . . . . . . . 9 2.13 怎样在运行时名字访问结构中的域? . . . . . . . . . . ...
  • 数据区包含某一字符的项的总和,该用什么公式 函数如何实现分组编码 【数值取整及进位】 取整数函数 数值取整 求余数的函数 四舍五入公式 对数字进行四舍五入 如何实现“见分进元” 四舍五入 如何四舍五入取两位小数 ...
  • 35.能用foreach遍历访问的对象需要实现 ________________接口或声明________________方法的类型。 答:IEnumerable 、 GetEnumerator。 36.GC是什么? 为什么要有GC? 答:GC是垃圾收集器。程序员不用担心内存管理...
  • EXCEL函数公式集

    热门讨论 2010-03-16 03:26:38
    数据区包含某一字符的项的总和,该用什么公式 函数如何实现分组编码 【数值取整及进位】 取整数函数 数值取整 求余数的函数 四舍五入公式 对数字进行四舍五入 如何实现“见分进元” 四舍五入 如何四舍五入取两位小数 ...
  • flash shiti

    2014-03-14 10:32:41
    影片不能有Loading B. 中间 C. 后面 D. 前面 2.Flash中设置属性的命令是? A. Set Polity B. Polity C. Property D. Set Property 3.Flash action“while”意义是? A. 卸载动画片段符号 B. 声明局部变量...
  • excel的使用

    2012-11-25 17:06:01
    2、单元格内容的合并根据需要,有时想把B列与C列的内容进行合并,如果行数较少,可以直接“剪切”和“粘贴”来完成操作,但如果有几万行,就不能这样办了。解决办法是:在C行后插入一个空列(如果D列没有内容,就...
  • asp.net知识库

    2015-06-18 08:45:45
    如何传值在2个页面之间 :要求不刷新父页面,并且不能用Querystring传值 Asp.net地址转义(分析)加强版 Web的桌面提醒(Popup) Using the Popup Object Click button only once in asp.net 2.0 Coalesys PanelBar ...

空空如也

空空如也

1 2 3 4
收藏数 70
精华内容 28
关键字:

为什么填充序列不能用