在c++中,如果我有两个数组a[10] and b[10],我可以引入一个可以用于这两个数组的索引,指向(i+1)-th元素a[i] and b[i]。迭代器是否也可以共享,或者我需要这样做:
vector<int> a;
vector<int> b; //assume both are initiated and same
vector<int>::iterator i; //assume program know i=10 and *i=20 in vector a
vector<int>::iterator j = b.beg
我在将未初始化的赋值给初始化的迭代器时遇到了问题。以下代码摘录在使用Visual Studio 2010生成时会产生访问冲突。在Visual Studio的早期版本中,代码应该可以工作。
#include <list>
int main() {
std::list<int> list;
std::list<int>::iterator it = list.begin();
std::list<int>::iterator jt;
it = jt; // crashes in VS 2010
}
这不会被认为是有效
我不能编译下面的程序。我在ubuntu上使用的是g++版本5。
#include<iostream>
#include<iterator>
int main()
{
iterator it;
return 0;
}
它给了我以下错误,
a.cc: In function ‘int main()’:
a.cc:5:5: error: ‘iterator’ was not declared in this scope
iterator it;
^
a.cc:5:5: note: suggested alternatives:
In fil
C++ 上最受欢迎的帖子声称,不清楚过去-结束迭代器(即,由end()、cend()、rend()和crend()返回的迭代器)是否根据与指向容器中元素的常规迭代器相同的规则无效。这些声明都是针对2003年和2011年的C++做出的,遵循了一篇讨论的文章,其中被接受的答案表明2003年的标准在这个问题上是模棱两可的。这个结论基于23.1/10 (在swap()的上下文中)中的一条评论,该评论似乎暗示,当规范没有明确提到过期迭代器的无效时,它们可能会失效。
对该帖子的问题(由mike-seymour提出)的评论表明,在deques的情况下,C++11在这个问题上是明确的。我的问题是关于所有容器:
我试图在下面的代码中计算出是否需要trying:
std::vector<int> values;
// ignore that this can throw std::bad_alloc
values.push_back(1);
try {
for (std::vector<int>::iterator iter = values.begin();
iter != values.end(); ++iter) {
++(*iter);
}
} catch (const std::bad_alloc&) {
#include <map>
int main()
{
auto coll = std::map<int, int>{{1, 2}};
auto pos = coll.begin();
(*pos).first; // OK. Conforming to the C++ standard.
pos->first; // Does this conform to the C++ standard too?
}
根据,迭代器对象pos必须保证*pos和++pos是有效的表达式。然而,C++标准并不要求pos->f
我有这样的情况:
我有一个跟踪指针数组的类。我构建了一个自定义迭代器,它遍历这个数组。
我的问题是如何让它成为线程安全,特别是在递增/递减的时候?
以下是我所拥有的相关部分的草稿:
typedef fruit * iterator;
class fruits
{
private:
fruit ** flist;
int n; //keeps track of position in flist
int count; //number of fruits
public:
iterator begin() {n=0; return fruit[n
看看下面的代码:
#include <algorithm>
#include <deque>
#include <iostream>
using namespace std;
int main()
{
deque<int> in {1,2,3};
deque<int> out;
// line in question
move(in.begin(), in.end(), out.begin());
for(auto i : out)
cout << i << endl;
r