Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/125.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++;:向量<;向量<;int>&燃气轮机;迭代器? 只是关于C++迭代器有一些基本问题。_C++_Iterator - Fatal编程技术网

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();
库特