一个数组外包装,错在哪里?

xlsue 2005-09-21 01:58:30
//数组外包装
#include <iostream>
#include <algorithm>
#include <cstddef>
using namespace std;

template <typename T, size_t thesize>
class carray {
private:
T v[thesize];
public:
typedef T value_type;
typedef T* iterator;
typedef const T* const_iterator;
typedef T& reference;
typedef const T& const_reference;
typedef size_t size_type;
typedef ptrdiff_t difference_type;

iterator begin() { return v;}
const_iterator begin() { return v;}
iterator end() { return v+thesize; }
const_iterator end() { return v+thesize;}

reference operator[](size_t i) { return v[i]; }
const_reference operator[](size_t i) const { return v[i]; }

size_type size() const { return thesize; }
size_type max_size() const { return thesize; }

T* as_array() { return v; }
};

int main()
{
carray<int, 10> a;

for(size_t i=0; i<a.size(); ++i)
a[i] = i+1;

for(size_t i=0; i<a.size(); ++i)
cout << a[i] << " ";
cout << endl;

reverse(a.begin(), a.end());
for(size_t i=0; i<a.size(); ++i)
cout << a[i] << " ";
cout << endl;

getchar();
return 0;
}

...全文
81 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
xlsue 2005-09-22
  • 打赏
  • 举报
回复
晕!竟然没有注意到!老是看它报错的地方。我用的是Dev-c++5.0。头河自尽去.....
sankt 2005-09-21
  • 打赏
  • 举报
回复
up
zhouhuahai 2005-09-21
  • 打赏
  • 举报
回复
问题出在:
iterator begin() { return v;}
const_iterator begin(){ return v;}
iterator end() { return v+thesize; }
const_iterator end(){ return v+thesize;}
函数重载发生错误:
不能以返回值是否为const来对函数重载.
解决方案:
1.为const的begin()和end()提供一个哑元参数.
如: const_iterator begin(int){ return v;}
2.改成const成员函数: 如
const_iterator begin() const { return v;}


oyd 2005-09-21
  • 打赏
  • 举报
回复
基本正确,但是要做一点点修改。

iterator begin() { return v;}
const_iterator begin()const { return v;}//加上const
iterator end() { return v+thesize; }
const_iterator end()const { return v+thesize;}//加上const

另外,如果在VC下编译,请定义一个宏
#define for if(0);else for

以避免VC中for的局部变量的BUG
foochow 2005-09-21
  • 打赏
  • 举报
回复
晕...这样当然不行....

64,646

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧