晕啊——关于vector,几天一直在搞这个东东。。。
试图模拟数组的取值,总是错误的。。。
用迭代器模拟也是错误的。。。。
看来STL由他自己的法则,与传统的编程有很大的区别,其中的交集很微妙。。
不知各位高手有何看法??
晕晕~~~~~~~
[解决办法]
试图模拟数组的取值
=========
vector支持随机访问
[解决办法]
用迭代器模拟也是错误的
===========
vector内置它的迭代器,本质是个嵌套类
[解决办法]
形式上不相同
vector尽量模拟内置数组的使用方式了
个人意见,高手多多指教
[解决办法]
我发现很多人喜欢用 "猜 "来工作,先看一下文档教程不好吗?
[解决办法]
回复人:todototry() ( 四级(中级)) 信誉:100 2007-01-23 14:21:55 得分:0
?
试图模拟数组的取值
=========
vector支持随机访问
=========================
向vector <vector <int> > m
这种的是二位数组就行。
但是对于自定义类型比如:
struct Gra {
};
vector < vector <Gra*> > k;
这种就不行。。。
举例说
[解决办法]
vector < vector <Gra*> > k;
有啥不行的?
这样用的。
k[0][0]->
[解决办法]
vector <vector <Gra> > 不行?Gra 对象复制成本太高或者不能复制?那么用 vector <vector <tr1::shared_ptr <Gra> > >
[解决办法]
第一建立的方式不同。对于内部内型可以这样:
vector < vector <int> > m(U);
for(int u = 0; u < U; u++)
m[u].assign(U,0);
而对于vector <vector <Gra*> > m;就不能这样建立,但可以用迭代器嵌套建立。
因为这样访问不是初始化的值,比如我想要k[0][0]值,很可能却是k[8][9]的值,还有可能指向其他内存,这样毫无规则。与数组不同。
================
对于vector <vector <Gra*> > m;就不能这样建立,我想要k[0][0]值,很可能却是k[8][9]的值,拿代码的举例
[解决办法]
我来讲下我的经验
叠代器在insert一个数据后就失效了,因为vector重整了自己的内存地址,但你用[]操作符是不会错的。
[解决办法]
楼主
vector <vector <Edge*> > adj(V, vector <Edge*> (V));即可,根本不用2重for循环。
再看你的代码
for(it = adj.begin(); it != adj.end(); it++)
{
iit = *it;你修改了iit的值,可*it仍然为空的。
//iit.assign(V, 0);
for(ii = iit.begin(); ii != iit.end(); ii++)很努力地修改了iit,而不是*it
*ii = 0;
}