gpt4 book ai didi

C++:vector> 迭代器?

转载 作者:太空狗 更新时间:2023-10-29 20:21:07 26 4
gpt4 key购买 nike

只是有一些关于 C++ 迭代器的基本问题。

假设我有一个对象 vector<vector<int>> vec2d .

vector<vector<int>>::iterator i, iEnd;
i = vec2d.begin();
iEnd = vec2d.end();

我想知道 i是整个一维数组的迭代器?

那是什么(*i) [1]什么意思?

最佳答案

I am wondering if i is an iterator of an entire 1D array?

嗯,vec2dvector<int> 的 vector 和 ivec2d的迭代器。可以考虑vec2d 1d vector 的 1d vector ,如果是,i是整个 vec2d 的迭代器(如前所述,一维 vector ),您可以将其视为 ints二维 vector (我认为这是不那么重要的选择)。

请注意,并非所有一维 vector 都相同。即使你考虑 vec2d作为一维 vector ,它是一个 vector OF vector<int> ,因此像这个小恶作剧i = tmp2.begin(); (来 self 下面的示例)将无法编译。

基本上,迭代器可以迭代特定的容器类型,无论是整数的 vector ,还是任何 vector 的 vector 。在我看来,一维和二维 vector 之间的区别不是问题。

what is that (*i) [1] mean?

考虑以下几点:

#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;
}

如您所见,*i带你“进入”你迭代的容器(在你的例子中,vec2d)和[1]为您提供该内部容器的第二个元素。

注意 *i[0] != (*i)[0]因为运算符优先级(在我的例子中它甚至不编译)。

关于C++:vector<vector<int>> 迭代器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45930791/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com