草庐IT

Iterator

全部标签

c++ - STL 迭代器是否保证集合更改后的有效性?

假设我有某种集合,并且我在它的开头获得了一个迭代器。现在假设我修改了集合。无论集合或迭代器的类型如何,我仍然可以安全地使用迭代器吗?为避免混淆,以下是我所说的操作顺序:获取集合的迭代器。修改集合(显然不是其中的元素,而是集合本身)。使用第1步得到的迭代器,按照STL标准还有效吗?! 最佳答案 取决于容器。例如如果是vector,修改容器后所有的迭代器都会失效。但是,如果是list,则与修改的地方无关的迭代器将保持有效。Avector'siteratorsareinvalidatedwhenitsmemoryisreallocated

c++ - STL 迭代器是否保证集合更改后的有效性?

假设我有某种集合,并且我在它的开头获得了一个迭代器。现在假设我修改了集合。无论集合或迭代器的类型如何,我仍然可以安全地使用迭代器吗?为避免混淆,以下是我所说的操作顺序:获取集合的迭代器。修改集合(显然不是其中的元素,而是集合本身)。使用第1步得到的迭代器,按照STL标准还有效吗?! 最佳答案 取决于容器。例如如果是vector,修改容器后所有的迭代器都会失效。但是,如果是list,则与修改的地方无关的迭代器将保持有效。Avector'siteratorsareinvalidatedwhenitsmemoryisreallocated

c++ - 当我用 g++ 编译器编译 c++ 时,错误是什么意思?

使用以下代码:#include#includeusingnamespacestd;intmain(){vectorivec;for(vector::size_typeix=0;ix!=10;ix++){ivec.push_back(ix);}vector::iteratormid=(ivec.begin()+ivec.end())/2;cout使用g++编译时出错:iterator_io.cpp:Infunction`intmain()':iterator_io.cpp:13:error:nomatchfor'operator+'in'(&ivec)->std::vector::beg

c++ - 当我用 g++ 编译器编译 c++ 时,错误是什么意思?

使用以下代码:#include#includeusingnamespacestd;intmain(){vectorivec;for(vector::size_typeix=0;ix!=10;ix++){ivec.push_back(ix);}vector::iteratormid=(ivec.begin()+ivec.end())/2;cout使用g++编译时出错:iterator_io.cpp:Infunction`intmain()':iterator_io.cpp:13:error:nomatchfor'operator+'in'(&ivec)->std::vector::beg

c++ - 使用索引 vector 重新排序 vector

这个问题在这里已经有了答案:HowdoIsortastd::vectorbythevaluesofadifferentstd::vector?[duplicate](13个回答)关闭8个月前。我想对vector中的项目重新排序,使用另一个vector来指定顺序:charA[]={'a','b','c'};size_tORDER[]={1,0,2};vectorvA(A,A+sizeof(A)/sizeof(*A));vectorvOrder(ORDER,ORDER+sizeof(ORDER)/sizeof(*ORDER));reorder_naive(vA,vOrder);//Aisn

c++ - 使用索引 vector 重新排序 vector

这个问题在这里已经有了答案:HowdoIsortastd::vectorbythevaluesofadifferentstd::vector?[duplicate](13个回答)关闭8个月前。我想对vector中的项目重新排序,使用另一个vector来指定顺序:charA[]={'a','b','c'};size_tORDER[]={1,0,2};vectorvA(A,A+sizeof(A)/sizeof(*A));vectorvOrder(ORDER,ORDER+sizeof(ORDER)/sizeof(*ORDER));reorder_naive(vA,vOrder);//Aisn

c++ - 如何使 C++ 中的 for each 循环函数与自定义类一起使用

我是C/C++编程的新手,但我已经使用C#编程1.5年了。我喜欢C#,也喜欢List类,所以我想在C++中制作一个List类作为练习。Listls;intwhatever=123;ls.Add(1);ls.Add(235445);ls.Add(whatever);实现类似于任何ArrayList类。我有一个T*vector我存储项目的成员,当这个存储空间即将被完全填满时,我调整它的大小。请注意,这不是在生产中使用的,这只是一个练习。我很清楚vector和friend。现在我想遍历列表中的项目。我不喜欢使用for(inti=0;i.我输入了for在VisualStudio中,等待Inte

c++ - 如何使 C++ 中的 for each 循环函数与自定义类一起使用

我是C/C++编程的新手,但我已经使用C#编程1.5年了。我喜欢C#,也喜欢List类,所以我想在C++中制作一个List类作为练习。Listls;intwhatever=123;ls.Add(1);ls.Add(235445);ls.Add(whatever);实现类似于任何ArrayList类。我有一个T*vector我存储项目的成员,当这个存储空间即将被完全填满时,我调整它的大小。请注意,这不是在生产中使用的,这只是一个练习。我很清楚vector和friend。现在我想遍历列表中的项目。我不喜欢使用for(inti=0;i.我输入了for在VisualStudio中,等待Inte

c++ - 如何将迭代器获取到 vector 的特定位置

假设我有一个std::vectorv//and...for(inti=0;i现在我想要一个迭代器,比如说vector的第10个元素。不做下面的做法std::vector::iteratorvi;vi=v.begin();for(inti=0;i因为这会破坏为vector提供随机访问迭代器的优势。 最佳答案 这将适用于任何随机访问迭代器,例如来自vector或deque的迭代器:std::vector::iteratoriter=v.begin()+10;如果您想要一个适用于任何类型迭代器的解决方案,请使用next:std::vect

c++ - 如何将迭代器获取到 vector 的特定位置

假设我有一个std::vectorv//and...for(inti=0;i现在我想要一个迭代器,比如说vector的第10个元素。不做下面的做法std::vector::iteratorvi;vi=v.begin();for(inti=0;i因为这会破坏为vector提供随机访问迭代器的优势。 最佳答案 这将适用于任何随机访问迭代器,例如来自vector或deque的迭代器:std::vector::iteratoriter=v.begin()+10;如果您想要一个适用于任何类型迭代器的解决方案,请使用next:std::vect