解除引用(指向)迭代器 [英] Dereferencing (pointer to) iterator
问题描述
假设我们有一个向量:
向量< 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屋!