using 命名空间

using namespace std;
using std::cin; using std::cout;    //只能使用cin,cout


头文件中不要包含using声明


string类型

初始化

基本操作:size(),empty(),下标[]等

字典序比较:<,>等

getline(cin, str); //读到一行的回车,存到str中但不保存回车

string::size_type :无符号,足够保存长度


vector类型

初始化

vector<My_Type> t1;
vector<int> ivec1(10, -1);    //十个-1
vector<int> ivec2(11);        //十一个默认0
vector<int> iv3c3{10, -1};    //10和-1

vs2010不支持{}


vector的效率问题

暂略


基本操作:=, ==, >, push_back(t),[]只用于访问,修改

确保下标合法,防止溢出


迭代器

访问容器中的元素

auto b = v.begin();    //指向首元素
atuo e = v.end();      //指向尾后元素


类型为vector<int>::iterators

vector<int>::const_iterators,只能读不能写


实际样例

vector<char> str(10, 'f');
for(auto it = str.begin(); it != str.end(); it++)
    cout << (char)toupper(*it);

不要在使用迭代器在循环体中访问的容器中添加元素,可能会导致迭代器失效


迭代器运算

直接加减,可以用不等号比较,越靠后越大。

相减得到的类型为dfference_type,表示距离。


简单的二分搜索

auto b = vint.end(), f = vint.begin();
    auto mid = f + (b - f) / 2;
    int num;
    cin >> num;
    while(f <= b && mid != vint.end())
    {
        if(*mid == num)
        {
            cout << "success" << endl;
            break;
        }
        else if(*mid < num)
        {
            f = mid + 1;
        }
        else if(*mid > num)
        {
            b = mid - 1;
        }
        mid = f + (b - f) / 2;
    }
    if(f > b || mid == vint.end())
        cout << "failed" << endl;


使用数组为vector初始化

int intarr[] = {1, 2, 3, 4, 5};
vector<int> vec1(intarr, intarr + 5);
vector<int> vec2(begin(intarr), end(intarr));