迭代器
利用下标访问string对象和vector对象的推广化。
获取迭代器返回迭代器中的迭代器。
例如
string s = "hello";
则 s.begin(); 获取了第一个迭代器,也就是'h'的地址;
s.end(); 获取了最后一个迭代器,是'o'的后一个迭代器,可以说就是一个空的,没有实际含义,称为“尾后迭代器”。
如果容器为空,则 s.begin() == s.end();
#include <iostream>
#include <string>
using std::cin;
using std::cout;
using std::endl;
using std::string;
int main()
{
string s;
cout << "Enter a word." << endl;
cin >> s;
auto a = s.begin();
auto b = s.end();
cout << *a << "--" << *b << "**" << endl;
return 0;
}
迭代器的使用方法与指针相类似:
//将string的第一个字母变为大写
#include <iostream>
#include <string>
using std::cin;
using std::cout;
using std::endl;
using std::string;
int main()
{
string s;
cout << "Enter a string." << endl;
getline(cin, s);
if (s.begin() != s.end())
{
auto i = s.begin();
*i = toupper(*i);
}
cout << s << endl;
return 0;
}
//删去文段中的空格
#include <iostream>
#include <string>
using std::cin;
using std::cout;
using std::endl;
using std::string;
int main()
{
int n = 0, i;
string s;
cout << "Enter a string." << endl;
getline(cin, s);
for (auto it = s.begin(); it != s.end()-n; it++)
{
if (isspace(*(it+n)))
{
n ++;
}
*it = *(it+n);
}
for (i = 1; i <= n; i++)
{
*(s.end()-i) = '\0';
}
cout << s << endl;
return 0;
}