2010/10/29
关键字:string、vector、迭代器
可以用using std::cin;代替using namespace std;如果程序中只使用了cin。同理可以用using std::cout;using std::endl;等
头文件中应该只定义确实必要的东西。因为头文件还会被其他源文件多次引用,增加出错的机会还会增大程序体积.
string s;cin>>s;时将忽略开头的空格,在遇到后面第一个空格时结束.
例如输入” Hello World! “,s实际为Hello.
Ctrl + Z表示结束输入:
string s;
while(cin >> s)
cout << s;
getline函数可以读取一行,直到遇到换行符为止,如果第一个字符是换行符,则读取到的string是空string.
while(getline(cin, s))
cout << s << endl;
string.size()返回size_type类型,而不是int等具体类型,该类型与机器相关,VC8编译器下:
#ifdef _WIN64
typedef unsigned __int64 size_t;
#else
typedef _W64 unsigned int size_t;
#endif
64位无符号整型足够表示string中能容纳下的字符个数.但是不可以将size_t类型变量赋值给一个int变量.string下标最好也用size_type类型.
vector.size()也是返回size_type.difference_type类型用以表示两个迭代器之间的距离,与size_type不同,difference_type是signed类型.
仅能对已存在的元素使用下标操作.对未知元素进行下标操作是未定义的.
end操作返回的迭代器指向vector的末端元素的下一个,通常称为超出末端迭代器(off-the-end iterator)
const_iterator迭代器只能读取容器中的元素但不能修改它们.
const iterator几乎没什么用处,因为一旦赋初值就不能再使它指向其他元素.
vector<int>::iterator mid = vi.begin() + vi.size()/2;可以直接定位vi的中间元素.
任何改变容器容量的操作都会使现有迭代器失效,例如调用push_back之后,就不能信赖迭代器了.