解除引用(指向)迭代器 [英] Dereferencing (pointer to) iterator

查看:158
本文介绍了解除引用(指向)迭代器的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

假设我们有一个向量:

向量< intvec(10);


我们可以用这种方式声明迭代器:

vector< int> :: iterator vecItor;


然后取消引用它:

for(vecItor = vec.begin(); vecItor! = vec.end(); vecItor ++)

{

cout<< * vecItor<<结束;

}


但是如果我们这样声明它们怎么能取消引用迭代器:

vector< int>: :iterator * vecItor;


(我需要在第二种方式声明迭代器,因为我在托管C ++类下声明它是
。)


谢谢!

解决方案

xg **** @ gmail.com 写道:


假设我们有一个向量:

vector< intvec(10);


我们可以用这种方式声明一个迭代器:

vector< int> :: iterator vecItor;


然后取消引用它:

for(vecItor = vec.begin(); vecItor!= vec.end(); vecItor ++)

{

cout<< * vecItor<<结束;

}


但是如果我们这样声明它们怎么能取消引用迭代器:

vector< int>: :iterator * vecItor;


(我需要在第二种方式声明迭代器,因为我在托管的C ++类下声明它是
。)



** vecItor出了什么问题?


V

-

请在通过电子邮件回复时删除资金''A'

我没有回复最热门的回复,请不要问


" XG **** @ gmail.com" < xg **** @ gmail.comwrote在

新闻:11 ********************** @ z28g2000prd.googlegr oups .com:


假设我们有一个向量:

向量< intvec(10);


我们可以用这种方式声明一个迭代器:

vector< int> :: iterator vecItor;


然后取消引用它:

for(vecItor = vec.begin(); vecItor!= vec.end(); vecItor ++)

{

cout<< * vecItor<<结束;

}


但是如果我们这样声明它们怎么能取消引用迭代器:

vector< int>: :iterator * vecItor;



** vecItor。


这是指向迭代器的指针。所以你需要取消引用你的指针

part,然后取消引用迭代器。


6月22日下午6:04,Andre Kostur< nntps ... @ kostur.netwrote:


" xgn ... @ gmail.com" < xgn ... @ gmail.comwrote innews:11 ********************** @ z28g2000prd.google groups.com:


假设我们有一个向量:

vector< intvec(10);


我们可以用这种方式声明迭代器:

vector< int> :: iterator vecItor;


然后取消引用它:

for(vecItor = vec.begin(); vecItor!= vec。结束(); vecItor ++)

{

cout<< * vecItor<< endl;

}


但是如果我们以这种方式声明它们,我们如何取消引用迭代器:

vector< int> :: iterator * vecItor;



** vecItor。


这是指向迭代器的指针。所以你需要取消引用你的指针

part,然后取消引用迭代器。



谢谢大家。这很有道理。但是,当我在

Visual Studio中运行时,


vector< intvec(10);

vector< int>: :iterator * vecItor = new vector< int> :: iterator();


for(* vecItor = vec.begin(); * vecItor!= vec.end(); vecItor ++ )

{

cout<< ** vecItor<<结束;

}


它导致调试断言失败:向量迭代器不兼容。


所以我怀疑有没有问题的语法。我只需要在其他地方搜索
搜索

找到让VS开心的方式。


Suppose we have a vector:
vector<intvec(10);

We can declare a iterator this way:
vector<int>::iterator vecItor;

and then dereference it like this:
for (vecItor = vec.begin(); vecItor != vec.end(); vecItor++)
{
cout << *vecItor << endl;
}

But how can we dereference the iterator if we declare it this way:
vector<int>::iterator* vecItor;

(I need to declare the iterator the second way since I''m declaring it
under a managed C++ class.)

Thanks!

解决方案

xg****@gmail.com wrote:

Suppose we have a vector:
vector<intvec(10);

We can declare a iterator this way:
vector<int>::iterator vecItor;

and then dereference it like this:
for (vecItor = vec.begin(); vecItor != vec.end(); vecItor++)
{
cout << *vecItor << endl;
}

But how can we dereference the iterator if we declare it this way:
vector<int>::iterator* vecItor;

(I need to declare the iterator the second way since I''m declaring it
under a managed C++ class.)

What''s wrong with **vecItor?

V
--
Please remove capital ''A''s when replying by e-mail
I do not respond to top-posted replies, please don''t ask


"xg****@gmail.com" <xg****@gmail.comwrote in
news:11**********************@z28g2000prd.googlegr oups.com:

Suppose we have a vector:
vector<intvec(10);

We can declare a iterator this way:
vector<int>::iterator vecItor;

and then dereference it like this:
for (vecItor = vec.begin(); vecItor != vec.end(); vecItor++)
{
cout << *vecItor << endl;
}

But how can we dereference the iterator if we declare it this way:
vector<int>::iterator* vecItor;

**vecItor.

That''s a pointer-to-iterator. So you need to dereference your pointer
part, then dereference the iterator.


On Jun 22, 6:04 pm, Andre Kostur <nntps...@kostur.netwrote:

"xgn...@gmail.com" <xgn...@gmail.comwrote innews:11**********************@z28g2000prd.google groups.com:

Suppose we have a vector:
vector<intvec(10);

We can declare a iterator this way:
vector<int>::iterator vecItor;

and then dereference it like this:
for (vecItor = vec.begin(); vecItor != vec.end(); vecItor++)
{
cout << *vecItor << endl;
}

But how can we dereference the iterator if we declare it this way:
vector<int>::iterator* vecItor;


**vecItor.

That''s a pointer-to-iterator. So you need to dereference your pointer
part, then dereference the iterator.

Thanks guys. That makes perfect sense. However, when I run this in
Visual Studio,

vector<intvec(10);
vector<int>::iterator* vecItor = new vector<int>::iterator();

for (*vecItor = vec.begin(); *vecItor != vec.end(); vecItor++)
{
cout << **vecItor << endl;
}

it caused debug assertion failure: vector iterators incompatible.

So I suspect there is no problem with the grammar. I just need to
search somewhere else to
find a way making VS happy.


这篇关于解除引用(指向)迭代器的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆