草庐IT

c++ - 为什么我不能使用迭代器访问 const vector ?

我的例子如下。我发现问题出在函数void测试参数中的“const”。我不知道为什么编译器不允许。有人能告诉我吗?谢谢。vectorp;voidtest(constvector&blah){vector::iteratorit;for(it=blah.begin();it!=blah.end();it++){cout 最佳答案 iterator被定义为返回对包含对象的引用。如果允许的话,这会破坏vector的常量性。请改用const_iterator。 关于c++-为什么我不能使用迭代器访

java - Java 和 C++ 中的迭代器有什么区别?

Iterator在Java中的实现与C++有何不同? 最佳答案 在当前的C++(98)标准库中(特别是以前称为STL的部分)定义了一种非常接近C指针(包括算术)的迭代器形式。因此,他们只是指向某个地方。为了有用,您通常需要两个指针,以便您可以在它们之间进行迭代。我理解C++0x引入了更像Java迭代器的范围。Java在1.2中引入了Iterator(和ListIterator)接口(interface),很大程度上取代了更冗长的Enumerable。Java没有指针算法,因此不需要表现得像指针。他们有一个hasNext方法来查看他们

c++ - 在容器中存储迭代器

我正在构建另一个应用程序将使用的DLL。我想在从函数调用返回之前将某些数据的当前状态全局存储在DLL的内存中,以便我可以在下一次调用该函数时重用状态。为此,我必须保存一些迭代器。我正在使用std::stack来存储所有其他数据,但我不确定我是否也可以使用迭代器来做到这一点。将列表迭代器放在容器类中安全吗?如果没有,您能否建议一种方法来存储指向列表中元素的指针,以便我以后可以使用它?我知道使用vector而不是列表来存储我的数据可以让我存储下标并非常容易地重用它,但不幸的是我只能使用std::list。 最佳答案 仅当列表被销毁或“指

c++ - 根据 C++17 标准,为什么反向迭代器不是正式的迭代器类别?

反向迭代器不在迭代器类别标签列表中,因此假定它不是一个类别。那么它到底是什么? 最佳答案 迭代器类别编码功能级别。输入迭代器是最低限度的-可递增和解引用一次前向迭代器是一种输入迭代器,您可以多次取消引用并支持多遍。双向迭代器是可以递减的正向迭代器随机访问迭代器是一个双向迭代器,您可以将O(1)推进+/-n连续迭代器是指连续内存的随机访问迭代器这些级别的功能由算法使用-一些算法需要特定级别的功能,一些算法可以简单地基于特定级别的功能进行优化(例如advance(it,n)对于随机访问迭代器可以只执行it+=n而对于前向迭代器它必须是+

c++ - 迭代器两个**的含义

在下面的代码段中vectorsceneObjs;vector::iteratoriter;iter=sceneObjs.begin();while(iter!=sceneObjs.end()){cout为什么**iter有两个*? 最佳答案 第一个*取消引用迭代器,给出一个SceneObject*指针。第二个*取消引用此SceneObject*指向SceneObject本身的指针。 关于c++-迭代器两个**的含义,我们在StackOverflow上找到一个类似的问题:

c++ - 列表迭代器超出范围

我对STLlistclass有疑问.我有一个名为Contact的基类和三个派生类Friend、Colleague和Acquaintance。派生类的每个实例都有我在fill*Class*Details()函数中修改的某些字段。问题是当它到达push_back行时,我的程序给我一个错误提示listinsertiteratoroutsiderange.那是什么?voidAgenda::pushContact(stringline,stringtemp)//functionthataddsacontactoftypetemp,containingthefieldsfromlinetothel

c++ - 什么时候使用协程而不是迭代器?

假设我有想要“一次一个”提供的数据。有很多数据,这就是为什么我只在需要时才得到一份(以节省内存)。所以我不能将整个数据存储在std::vector中。今天我可以为此使用迭代器,因为它们自然地满足了这个要求。但我也可以使用协同程序(目前使用的是CoroutinesTS)。不需要使用仅使用迭代器的算法。在这种情况下使用协程比使用迭代器有什么优势吗? 最佳答案 迭代器充当一种胶水,允许用户编写对值序列进行运算的算法,而无需知道该序列是如何到达那里或如何保存的。但是算法和序列之间的特定“胶水”是无关紧要的。唯一重要的是算法的特定实现必须根据

c++ - 只计算递增次数的输出迭代器?

在STL/Boost中,有没有现成的只计算自增次数的输出迭代器?当算法执行*iter=value时,该值将被简单地丢弃。如果没有,那么滚动我自己的似乎很容易。尽管如果有人发布了此类迭代器的示例,它可能对其他人有用。 最佳答案 标准C++中不存在这样的迭代器,据我所知,没有任何Boost迭代器具有这种确切的功能。不过,有很多方法可以使用这些库来执行此操作,而无需自己动手。例如,使用Boost的function_output_iterator,您可以像这样构建一个计数器:structCounter{size_t*out;explicit

c++ - LNK2038,迭代器不匹配错误,需要忽略

尝试将VS2008项目转换为VS2010时出现链接器错误LNK2038。当编译两个不同的项目时会发生此错误,其中一个项目使用_DEBUG预处理器宏,而另一个未使用。基本上我有一个只有发布.libs的第3方库,所以当我在Debug模式下构建我的项目时尝试使用该库时,我得到了这个不匹配。我明白为什么微软会给出这个错误(STL迭代器安全),但是我们的项目没有使用微软的STL,我们使用的是STLPort,所以这个错误对我们的项目没有任何意义。我只需要一种方法来阻止它执行此检查。STL内部包含一个名为yvals.h的文件,其中包含各种_ITERATOR_DEBUG_LEVEL设置的#pragma

c++ - 等效于嵌套 for 循环的迭代器显示 50% 的性能故障 - 为什么?

我试图实现/弄清楚什么我试图找出为任意维数编写通用容器(vector、矩阵、高维对象)的最佳方法。应在编译时指定维数以及每个维的元素数,如下所示:3给出一个包含3个元素的vector10,10给出一个包含100个元素的矩阵7,5,3给出一个具有105个元素的二阶张量...人们应该能够以一种简单的方式循环遍历所有元素以进行简单的操作:将所有(double)元素乘以标量double,按元素添加两个兼容的容器等。此外,应该能够循环遍历所有元素,知道它们每个维度的相应索引,例如来自(0,0,0)至(6,4,2)对于张量。我的尝试:递归迭代器嵌套可变参数模板我认为可变参数模板参数是一个很好的工具