The standard string class offers two ways to access a single character from a string object. The first one is to use the overloaded subscript operator [ ] like in the following example:
#include using namespace std;void main(){ string s = "hello world"; char c = s[0]; //assign 'h' to c}
Another way is to use the at() member function:
try{ string s = "hello world"; char c = s.at(0); //assign 'h' to c; safer than [ ] but less efficient. }catch(bad_range& str_ex) { //when accessing an out of range element, at() throws a bad_range exception/*..*/ }
There are two differences between these access methods. The [ ] operator is efficient but unsafe since it does not perform range checking. Accessing an out of range member is possible and results in an undefined behavior. The at() member function, on the other hand, is less efficient but safer, since it performs range checks. In case of an attempt to access an out of range member, it throws an exception of type std::bad_range. Please note that exactly the same access rules apply to vector<> as well.