Pascal数组的优越性已被C++用户赶上
noip吧
全部回复
仅看楼主
level 8
dugucloud 楼主
一楼熊了
2011年11月20日 12点11分 1
level 9
怎么回事。求解释。
2011年11月20日 12点11分 2
level 8
dugucloud 楼主
本人通过重载vector实现了C++模仿Pascal数组。
这里先贴出源代码:
template <typename elemType, int left, int right>
struct PArray : public vector<elemType>
{
PArray() : vector<elemType>(right-left+1) { }
elemType &operator[] (int sub)
{
return vector<elemType>::operator[](sub-left);
}
};
这里只是重载了vector的下标,其实at()函数也可以使用类似的方法。另外构造函数也只是简单的写了一个。
实际编程的时候可以不必写成模板的样子,只是重载成所需的成员类型即可。
2011年11月20日 12点11分 3
level 8
dugucloud 楼主
缩进给吞了……
2011年11月20日 12点11分 4
level 8
dugucloud 楼主
哦对了,使用时一定记得包含<vector>。
给两个实例:
#include <vector>
#include <string>
#include <iostream>
using namespace std;
int main ()
{
PArray<int, -2, 2> arr1; // 类似 "var arr1: array[-2..2] of integer"
arr1[-2] = 100;
arr1[-1] = 16;
arr1[0] = 1000;
arr1[1] = 87;
arr1[2] = 10000;
for (int i=-2; i<=2; ++i)
cout << arr1[i] << ' ';
cout << endl;
// 输出: 100 16 1000 87 10000
PArray<string, 'a', 'e'> arr2; // 类似 "var arr2: array['a'..'e'] of string"
arr2['a'] = "I";
arr2['b'] = "love";
arr2['c'] = "OI";
arr2['d'] = "and";
arr2['e'] = "NNEZ";
for (char i='a'; i<='e'; ++i)
cout << arr2[i] << ' ';
cout << endl;
// 输出: I love OI and NNEZ
return 0;
}
好了,估计这缩进又是给吃掉的,勉强大家了。
2011年11月20日 12点11分 5
level 8
dugucloud 楼主
申精 @WJMZBMR @低级忍者神龟 @叶鵼菻
2011年11月20日 13点11分 6
level 8
dugucloud 楼主
说明一下,5L其实开始还有一段3L的代码省略掉了,大家自己补上。
2011年11月20日 13点11分 7
level 8
int a1[n],*a=a1-lb;
2011年11月20日 13点11分 10
level 8
dugucloud 楼主
Pascal的内置数组下标很灵活,任意整数或者字符都可以。其实C++也可以通过上述的小技巧做到。
考虑到map效率较低,因此重载vector也不算太麻烦。
2011年11月20日 13点11分 11
level 8
dugucloud 楼主
orz
PS我觉得指针太危险
2011年11月20日 13点11分 12
level 1
不用vector的话,重载方括号操作符需要返回引用才可。
曾经想过用可变参数实现任意多维数组,不过没尝试过…
2011年11月20日 13点11分 13
level 5
我觉得那样用大好啊,清晰明了。指针本身不危险。危险是因为用错了,就像数组本身很正常,你要越界的下标访问不就相当于用指针乱指了。
2011年11月20日 13点11分 14
level 7
LZ签名档好高端
抱走了
2011年11月20日 13点11分 15
level 9
我只想知道linux会报错么,linux判断数组下标无比蛋疼
2011年11月20日 14点11分 16
level 1
为什么不int memo[1000], *array = memo + 500;然后array[-1]什么的随便用啊。
没太明白用vector的意义,印象里这些东西就是为TLE设计的。
2011年11月20日 14点11分 17
level 9
不明白用vector的意义,说明您还只是把C++当做脚本语言来用。
2011年11月20日 15点11分 18
level 8
感觉这个的意义就是让楼主熟练了vector和重载的语法……
2011年11月20日 15点11分 19
level 9
iterator a=v.begin();
iterator z=v.end();
for(iterator i=a;i<=z;i++)cout<<i;
都以假乱真了
2011年11月20日 15点11分 20
1 2 尾页