请问一个有关iterators的问题。。。

lglabc 2003-06-13 02:48:03
我定义了一个vector<long>变量;指定了一个iterators,
我用find函数在这个vector中找到某个特定数值的pos,现在我想知道这个pos是单数还是偶数(也就是说这个特定数值的索引值是单数还是偶数),不过pos好像不是一个连续的整形数字(比如说第一个位置就返回1,第二个位置就返回2。。。),有没有办法将pos变成连续的索引值(1,2,3,4。。。)呢?
或者用什么其他的方法??

谢谢!
...全文
107 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
lglabc 2003-06-15
  • 打赏
  • 举报
回复
噢!有道理,merlinran兄果然厉害。

同时也谢谢其他几位了!
yecao_kinux 2003-06-14
  • 打赏
  • 举报
回复
问题的关键是你的vector是否一直在动态的变化呢?
如果不是,那么这个步长是可以在vector不在动态变化时计算出来的,那么这个位置也就相对不变;
但如果vector是一直在动态的变化的,估计这种办法实现起来就很困难了.
lglabc 2003-06-14
  • 打赏
  • 举报
回复
如果定义步长的话,要定义多大呢?long?
merlinran 2003-06-14
  • 打赏
  • 举报
回复
其实在所有序列容器上都可以实现你的要求,包括list之类没有随机迭代器的容器。关键点是不要把迭代器想成指针。

比如用vector,假设有一个vector v和它上面的一个iterator pos:
bool odd = distance(pos, v.begin())%2 == 1;

这里的关键是distance返回的是iterator::difference_type,就是该迭代器与容器首部的距离。而这个difference_type要求必须是signed integer type,所以可以对它进行取模运算。参见标准中的23.1节table 65。
lglabc 2003-06-14
  • 打赏
  • 举报
回复
哦,那就可惜了,我的vector肯定要变的。。。

还有什么别的方法吗?
晨星 2003-06-13
  • 打赏
  • 举报
回复
呵呵,不用客气。
yecao_kinux 2003-06-13
  • 打赏
  • 举报
回复
是否可用一个相对vector<long>::begin()的步长来表示呢?这样一来也是可准确的访问vector里的数据的.
yecao_kinux 2003-06-13
  • 打赏
  • 举报
回复
动态Vector的确不在适合用下标概念来描述了,pos一般来说应该把它看做是一个非连续的整形数字,但如果非要给一个索引值,我看把它当作连续的也未尝不可.

或者还有什么其他的方法呢?关注中.....

to steedhorse(晨星):
借此表示谢谢.昨日下线早 Zz..... ^_^
lglabc 2003-06-13
  • 打赏
  • 举报
回复
哎呀!没看完,只好再发一个了。
snipersu 兄没理解我的意思,我不是说vector中的值是奇数还是偶数,而是说索引值是奇数还是偶数,所以你的方法还不能解决我的问题。。。
lglabc 2003-06-13
  • 打赏
  • 举报
回复
哦,先谢了!

我之所以用vector,是因为我的数组是动态的,自己写太麻烦了,呵呵。这个简单一点。
snipersu 2003-06-13
  • 打赏
  • 举报
回复
void main()
{
vector<long> lv;
for(int i=0;i<20;i++)
lv.push_back(i+i);
for(int j=0;j<20;j++)
{
vector<long>::iterator it=find(lv.begin(),lv.end(),j+j);
cout<<j<<":Find the element "<<lv[j]<<" at the pos of vector "<<it-lv.begin()<<endl;
}
}
晨星 2003-06-13
  • 打赏
  • 举报
回复
vector等容器,其迭代器的具体类型信息对用户是透明的,从封装的角度考虑,除了通过它对容器进行读写增删外,不提倡在把它用作别的用途。

对于你的问题,可是将vetor作为数组使用。

vector<long> vec;
for(int i = 0 ; i < vec.size() ; i++)
{
if(vec[i] ……)
……
}

但对于容器而言,“索引值”的概念已不是那么重要,如果那么关心“索引值”,为什么不使用数组呢?

24,854

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 工具平台和程序库
社区管理员
  • 工具平台和程序库社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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