原意是想要用迭代器访问vector的数组,但是访问列迭代器时,查询其他博主要用 * 来访问,但是写了报错了,求解答。
vs为1.5倍,即 0.5 倍扩增Capacity
linux为2倍,即 1 倍扩增Capacity
在C++中,使用二维vector的列迭代器来访问其数组需要使用以下步骤:
vector<vector<int>> vec{ {1,2,3},
{4,5,6},
{7,8,9} };
for (auto it = vec[0].begin(); it != vec[0].end(); ++it) {
cout << *it << endl;
}
这里以访问第一列为例,直接使用二维vector的下标运算符访问第一列,并使用begin()和end()函数获取该列的起始和终止迭代器。
如果要访问所有列,则可以通过使用内层迭代器的advance函数,将外层迭代器向后移动一个元素。注意,在使用advance函数时,要先将迭代器类型指定为auto。
for (auto it = vec[0].begin(); it != vec[0].end(); ++it) {
for (auto inner = vec.begin(); inner != vec.end(); ++inner) {
cout << *it << " ";
advance(it, 1);
}
cout << endl;
}
这样就可以输出所有列了。同时还需注意,advance提供了协成迭代器递增的功能。
虽然可以使用 * 运算符来访问二维vector中的元素,但是不建议这样使用。因为应该使用迭代器来访问vector中的元素,这样代码可读性更高,缩小了出错的概率。而且,一维vector中 * 运算符访问方式不同,这会给程序员带来混淆和不便。