gpr*_*rex 3 c++ iterator vector
我刚刚开始学习向量和迭代器。我不明白两件事。为什么可以更改常量迭代器,“ *”的作用是什么?
#include <iostream>
#include <string>
#include <vector>
using namespace std;
int main()
{
vector<string> inventory;
inventory.push_back("inventory1");
inventory.push_back("inventory2");
inventory.push_back("inventory3");
vector<string>::iterator myIterator;
vector<string>::const_iterator iter;
cout << "Your items:\n";
for (iter = inventory.begin(); iter != inventory.end(); iter++)
{
cout << *iter << endl;
}
Run Code Online (Sandbox Code Playgroud)
为什么我可以更改常量迭代器
您有一个const类型为 的非迭代器vector<string>::const_iterator。您可以更改它,因为它不是const. 作为一个const_iterator意味着取消引用它会返回const对对象的引用。这意味着不能修改引用的对象。
迭代器是非,const因为该类型vector<string>::const_iterator没有const限定符。
“*”的作用是什么
它是解引用运算符。它返回迭代器当前正在定位的对象。更确切地说,它返回对对象的引用。它的另一个名称是间接运算符。
在执行iter = inventory.begin()此操作时,将iter引用向量中的第一个字符串。iter++移动它以引用下一个字符串。
在输出中,您*iter用作访问所iter引用字符串的方式。在第一个输出中将是inventory1。
关于常数的一点困惑是
vector<string>::const_iterator iter;
Run Code Online (Sandbox Code Playgroud)
是一个迭代器,它引用不变的事物,而
const vector<string>::iterator iter;
Run Code Online (Sandbox Code Playgroud)
会使迭代器本身保持不变,但允许您修改其引用的对象。
| 归档时间: |
|
| 查看次数: |
2830 次 |
| 最近记录: |