C++;:向量<;向量<;int>&燃气轮机;迭代器? 只是关于C++迭代器有一些基本问题。
假设我有一个对象C++;:向量<;向量<;int>&燃气轮机;迭代器? 只是关于C++迭代器有一些基本问题。,c++,iterator,C++,Iterator,假设我有一个对象向量vec2d vector<vector<int>>::iterator i, iEnd; i = vec2d.begin(); iEnd = vec2d.end(); vector::迭代器i,iEnd; i=vec2d.begin(); iEnd=vec2d.end(); 我想知道I是否是整个1D数组的迭代器 (*i)[1]是什么意思?(*i)[1]正在访问当前迭代器的第二个元素。假设没有其他代码,其计算结果将与示例中的vec2d[0][1]相同
向量vec2d
vector<vector<int>>::iterator i, iEnd;
i = vec2d.begin();
iEnd = vec2d.end();
vector::迭代器i,iEnd;
i=vec2d.begin();
iEnd=vec2d.end();
我想知道I
是否是整个1D数组的迭代器
(*i)[1]
是什么意思?(*i)[1]
正在访问当前迭代器的第二个元素。假设没有其他代码,其计算结果将与示例中的vec2d[0][1]
相同。因为vec2d
的模板参数是vector
,所以迭代器i
将取消对vector
的引用(如您所说的1d数组)。如果您询问vec2d
本身是否在内部是一个连续内存的大数组,则否,vec2d
的每个元素都指向它自己的资源,并且一个向量元素的迭代器不能迭代到下一个。
(*i)[1]
相当于i[0][1]
并访问vec2d
中第一个向量的第二个into。您可以使用以下命令迭代vec2d
中的所有整数:
for (vector<vector<int>>::iterator i = vec2d.begin(); i != vec2d.end(); ++i) {
for (vector<int>::iterator j = i->begin(); j != i->end(); ++j) {
cout << *j; // do something with *j
}
}
#include <iostream>
#include <vector>
using namespace std;
int main(){
vector< vector<int> > vec2d;
vector<int> tmp1;
tmp1.push_back(1);
tmp1.push_back(2);
vector<int> tmp2;
tmp2.push_back(3);
tmp2.push_back(4);
vec2d.push_back(tmp1);
vec2d.push_back(tmp2);
vector< vector<int> >::iterator i, iEnd;
i = vec2d.begin();
iEnd = vec2d.end();
cout << (*i)[1] << endl; // outputs 2 (same as vec2d[0][1])
cout << vec2d[0][1] << endl; // outputs 2
cout << vec2d[1][0] << endl; // outputs 3
cout << vec2d[1][1] << endl; // outputs 4
return 0;
}
for(向量::迭代器i=vec2d.begin();i!=vec2d.end();+i){
对于(向量::迭代器j=i->begin();j!=i->end();++j){
库特
我想知道我是否是整个1D数组的迭代器
<>代码> VC2D2>代码>是一个向量<代码>向量<代码>和<代码> <代码> > VEC2< <代码>迭代器。您可以考虑<代码> VEC22<代码>一维向量的向量,如果是,<代码> i>代码>是整个代码> VEC22<代码>的迭代器(也就是说,一个一维向量),或者您可以将其视为ints
的二维向量(我认为这是一个不那么琐碎的选项)
注意并非所有的一维向量都是相同的,即使你把<代码> VEC2D2/代码>作为一维向量,它的向量<强> < <强> >代码>向量< /代码>,因此类似于这个小Shanaigang<代码> i= tMP2..NeXOW);< /C> >(从我的例子中)将不会编译。< /P>
基本上,迭代器可以在特定的容器类型上进行迭代,可以是整数向量,也可以是任意向量。在我看来,一维向量和二维向量之间的区别不是问题所在
这是什么意思
考虑以下几点:
for (vector<vector<int>>::iterator i = vec2d.begin(); i != vec2d.end(); ++i) {
for (vector<int>::iterator j = i->begin(); j != i->end(); ++j) {
cout << *j; // do something with *j
}
}
#include <iostream>
#include <vector>
using namespace std;
int main(){
vector< vector<int> > vec2d;
vector<int> tmp1;
tmp1.push_back(1);
tmp1.push_back(2);
vector<int> tmp2;
tmp2.push_back(3);
tmp2.push_back(4);
vec2d.push_back(tmp1);
vec2d.push_back(tmp2);
vector< vector<int> >::iterator i, iEnd;
i = vec2d.begin();
iEnd = vec2d.end();
cout << (*i)[1] << endl; // outputs 2 (same as vec2d[0][1])
cout << vec2d[0][1] << endl; // outputs 2
cout << vec2d[1][0] << endl; // outputs 3
cout << vec2d[1][1] << endl; // outputs 4
return 0;
}
#包括
#包括
使用名称空间std;
int main(){
向量<向量>向量2D;
载体tmp1;
tmp1.推回(1);
tmp1.推回(2);
载体tmp2;
tmp2.推回(3);
tmp2.推回(4);
vec2d.推回(tmp1);
vec2d.推回(tmp2);
向量<向量>::迭代器i,iEnd;
i=vec2d.begin();
iEnd=vec2d.end();
库特