鱼C论坛

 找回密码
 立即注册
查看: 1487|回复: 3

对数组push_back

[复制链接]
发表于 2021-9-23 17:39:04 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 万千只cnm 于 2021-9-23 17:44 编辑
  1. template<class T>
  2. void
  3. arrayList<T>::push_back(T theElement){
  4.      
  5.      if(listSize == arrayLength)
  6.          ChangeArray();//默认翻两倍
  7.       copy_backward(element+arrayLength-listSize,element+arrayLength-1,element+arrayLength-2);
  8.       element[arrayLength-1]=theElement;
  9.       listSize++;
  10. }
  11. template<class T>
  12. void
  13. arrayList<T>::pop_back(){
  14.      if(empty()){
  15.          cout<<"error"<<endl;
  16.          exit(1);
  17.      }
  18.         copy_backward(element+arrayLength-listSize,element+arrayLength-2,element+arrayLength-1);
  19.         listSize--;
  20.       
  21. }
复制代码
请问哪里错了呀 到copy函数直接断了
以下下是部分内容
  1. template<class T>
  2. class arrayList:public linearList<T> //从抽象类派生出的具体类(必须全部实现基类的函数才算)
  3. {
  4.      public:
  5.       arrayList(int initCapacity =10); //构造函数
  6.       arrayList(const arrayList<T>&);  //赋值函数
  7.       arrayList(const arrayList<T>&,const int ReInit = 0);
  8.       ~arrayList(){
  9.           delete [] element;
  10. void push_back(T theElement);
  11.         void pop_back();
  12.      protected:
  13.            
  14.            T *element;
  15.            int arrayLength;
  16.            int listSize;
  17.       }
复制代码

  1. int main(){
  2.    
  3.    arrayList<int> a(10),b(20);
  4.       a.push_back(9);
  5.       a.push_back(100);
  6.       a.push_back(999);
  7.       cout<<a[9]<<endl;
  8.       a.pop_back();
  9.       cout<<a[9];
  10.       
  11.      
  12.     return 0;

  13. }
复制代码

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2021-9-23 17:48:20 | 显示全部楼层
  1. copy_backward(element+arrayLength-listSize,element+arrayLength-2,element+arrayLength-1);
复制代码

从数组末尾添加元素 跟栈一样
我用copy整体往前移一个 然后赋值最后一个元素  ,为什么copy会不行呢
element+arrayLength-listSize 是第一个元素
element+arrayLength-1是最后一个元素

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-9-23 18:57:41 | 显示全部楼层
  1. template<class T>
  2. void
  3. arrayList<T>::push_back(T theElement){
  4.      
  5.      if(listSize == arrayLength)
  6.          ChangeArray();//默认翻两倍
  7.       //第三个参数
  8.       copy_backward(element+arrayLength-listSize,element+arrayLength,element+arrayLength-1);//第二个尾部迭代器
  9.       element[arrayLength-1]=theElement;
  10.       listSize++;
  11. }
  12. template<class T>
  13. void
  14. arrayList<T>::pop_back(){
  15.      if(empty()){
  16.          cout<<"error"<<endl;
  17.          exit(1);
  18.      }
  19.         copy_backward(element+arrayLength-listSize,element+arrayLength,element+arrayLength+1);
  20.         listSize--;
  21.       
  22. }
复制代码

好像调对了  
第三个参数到底是啥 头指针?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-9-23 21:36:45 | 显示全部楼层
眼睛都看花了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-4-26 10:29

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表