迭代器
迭代器[iterator]提供了一種一般化的方法,對順序或關聯容器類型中的每個元素進行連續訪問。例如,假設iter 爲任意容器類型的一個iterator ,則
++iter;
向前移動迭代器 使其指向容器的下一個元素 而 *iter;
返回iterator 指向元素的值
iterator 是vector 類中定義的typedef 以下語法
vector<string>::iterator
可以用標量算術運算使iterator 從當前位置偏移到某個位置上 例如
vector<int>::iterator iter = vec.begin()+vec.size()/2;
iterator 算術論算只適用於vector 或deque ,而不適用於list。因爲list 的元素在內存中不是連續存儲的。
#include <string>
string words[4] = {
"stately", "plump", "buck", "mulligan"
};
我們可以通過傳遞數組words 的首元素指針和末元素後一位置的指針來初始化string
vector< string > vwords( words, words+4 );
關於string的子字符串匹配
string::npos
表明沒有匹配 string name( "AnnaBelle" );
int pos = name.find( "Anna" );
if ( pos == string::npos )
cout << "Anna not found!\n";
簡要地概括一下string 類支持的其他查找函數 。
除了find()和find_first_of()外,string 類還支持其他幾個查找操作 rfind() ,查找最後 即最右 的指定子串的出現
string river( "Mississippi" );
string::size_type first_pos = river.find( "is" );
string::size_type last_pos = river.rfind( "is" );
find()返回索引值1表明第一個 is的開始 而rfind()返回索引值4find_first_not_of()查找第一個不與要搜索字符串的任意字符相匹配的字符 例如 爲找到第一個非數字字符 可以寫
string elems( "0123456789" );
string dept_code( "03714p3" );
// returns index to the character 'p'
string::size_type pos = dept_code.find_first_not_of(elems);
find_last_of()查找字符串中的 與搜索字符串任意元素相匹配 的最後一個字符
find_last_not_of()查找字符串中的 與搜索字符串任意字符全不匹配 的最後一個字符
at()操作
提供了運行時刻對索引值的範圍檢查。
如果索引是有效的,at()返回相關的字符元素,與下標操作符的方式相同;但是 如果索引無效,則at()拋出out_of_range 異常
void
mumble( const string &st, int index )
{
try {
char ch = st.at(index);
catch( std::out_of_range ) { ... }
// ...
}