1
keakon 2013-05-18 16:34:12 +08:00 1
好像是 new 了一个数组,这个数组的长度为 number,每个元素都是 std::list< class *> 类型,这个类型是可以存储指向 class 类型的指针的列表。
正常人应该是用 std::list<std::list<class &>>。 |
2
magicsilence 2013-05-18 16:34:40 +08:00 1
数组。
|
3
thedevil5032 OP |
4
primer 2013-05-18 17:08:59 +08:00 1
@ thedevil5032
楼主说的 List[number].push_back(), List指的是数组,数组里每个元素都是一个std::list。 看你的意思是想定义一个list数组,看下面代码: std::list<int> List[N]; List[0].push_back(11); List[1].push_back(12); |
5
primer 2013-05-18 17:09:48 +08:00 1
@thedevil5032
上面一条回复没@ 中,再@ 一下 |
6
detailyang 2013-05-18 20:51:19 +08:00 1
从右往左看,分配了长度为number的数组的,其中数组的元素为std的链表 std::list<class *>,链表中存储的为指向class类型的指针 = =.
|
7
thedevil5032 OP |
8
primer 2013-05-18 22:37:14 +08:00 1
@thedevil5032 是的。List[index]就是索引list数组中的第index个元素,这里List数组每个元素都是一个std::list。
List[0].push_back(11), 把11 push_back到List数组的第1个元素(list)里。 List[1].push_back(12), 把12 push_back到List数组的第2个元素(list)里。 |
9
Golevka 2013-05-19 02:22:47 +08:00 1
这显然是new出一堆list啊. 看起来像是个hash table, 其中每个lst[k]是一个bucket, lst[k].push(a)相当于将a送入hash的第k个bucket
|
10
chchwy 2013-05-19 23:06:29 +08:00 1
漸進式C++語法解析
new XXX[ 3 ]; => 以數組方式創建 3 個 XXX 對象 new XXX[ number ]; => 以數組方式創建 number 個 XXX對象 new std::list< class *>[ number ]; => 以數組方式創建 number 個 std::list<class*> 對象 |
11
raychow 2013-05-20 14:19:37 +08:00 1
std::list<class *> *pList = new std::list< class *>[ number ];
这个 class 猜测是一个类,但这种命名真是… 因此这句话在 new 了一个 list 数组,而 list 的内容是指向 class 类型的指针。 |
12
shiweifu 2013-05-20 14:39:54 +08:00 via iPhone 1
支持范型的数组?
|
13
thedevil5032 OP @keakon @magicsilence @primer @Golevka @detailyang @chchwy @raychow @shiweifu
感谢各位的答复。 顺便提一个新的问题,代码如下: template<int I> functionX(xx) { return functionX<I-1>(xx);} template<> functionX(xx)<1>{ ..... } 最后调用的时候的代码,如下(M,N为常数) functionX<M*N>(xx) |
14
ooxxcc 2013-05-20 17:30:15 +08:00 1
|
15
thedevil5032 OP @ooxxcc 最后调用的时候那个 <M*N> 是表明什么呢? 原函数返回值乘以 M*N?(我瞎猜的)
|
16
primer 2013-05-20 17:34:48 +08:00 1
@thedevil5032
楼主的问题是? 感觉是C++模版元编程,涉及到模版偏特化。 我理解的话functionX<M*N>(xx) 执行结果等效于 functionX<1>(xx)。其实就是一个递归。 相当于 void func(int a) { if (a == 1) { ... } else { func(a-1); } } 不同的是,这里是模板,一个是编译时,一个是运行时。 |
17
sqbing 2013-05-20 17:36:36 +08:00 1
@thedevil5032 M和N都是常数,相乘得到的自然也是常数
|
18
ooxxcc 2013-05-20 17:42:07 +08:00 1
@thedevil5032 两个都是常数,事先定义好的,然后整个式子会在编译的时候求值
|
19
thedevil5032 OP |
20
ooxxcc 2013-05-20 17:55:15 +08:00 1
@thedevil5032 对的,不过这种方式只能传递常量,不可在程序运行时更改
你给的代码里有 template<int I> functionX(xx) { return functionX<I-1>(xx);} 这样每个函数返回的值都是一样的,都是functionX<1> (xx)。。。。 |
21
Golevka 2013-05-20 23:53:49 +08:00 1
@thedevil5032 按照你在13L给出的例子, M*N除了在编译时构造出一大堆临时函数之外什么好事都没做. 一个稍微有趣一点例子是{ return I * functionX<I-1>(xx); }, 这样当你以functionX<K>(1)的形式调用时会计算出K的factorial.
|
22
thedevil5032 OP |
23
twd2 2013-05-21 00:19:11 +08:00 1
在 C++ 中新建一个 list 是这样的: std::list<int> List;
在 C++ 中新建一个 list数组 是这样的:new std::list< class *>[ number ] |