MinGW中的两组头文件(c++/和c++/tr1/)

今天在搜索cstdio文件时发现有两个,分别位于

mingw-w64\x86_64-8.1.0-posix-seh-rt_v6-rev0\mingw64\lib\gcc\x86_64-w64-mingw32\8.1.0\include\c++
mingw-w64\x86_64-8.1.0-posix-seh-rt_v6-rev0\mingw64\lib\gcc\x86_64-w64-mingw32\8.1.0\include\c++\tr1

唯一的区别只是后者在这个tr1的子文件夹下.
什么是tr1?

C++ TR1 是ISO/IEC TR 19768 C++ Library Extensions(函式库扩充)的一般名称。TR1 是一份文件,内容提出了对C++标准函式库的追加项目。这些追加项目包括了正则表达式、智能指针、哈希表、随机数生成器等。TR1自己并非标准,他是一份草稿文件。然而他所提出的项目很有可能成为下次的官方标准。这份文件的目标在于「为扩充的C++标准函式库建立更为广泛的现成实作品」。
C++ tr1是针对C++标准库的第一次扩展。即将到来的下一个版本的C++标准c++0x会包括它,以及一些语言本身的扩充。tr1包括大家期待已久的smart pointer,正则表达式以及其他一些支持范型编程的内容。草案阶段,新增的类和模板的名字空间是std::tr1。

经过测试,一般情况下编译器调用的是前者的头文件.

C++中的类的访问属性和继承方式

C++中的类的访问属性和继承方式

访问属性

成员属性 内部函数调用 子类调用 外部调用
public 成员
protected 成员 ×
private 成员 × ×

继承方式

继承方式 基类的public成员 基类的protected成员 基类的private成员 概括
public 继承 public protected 不可见 非私有成员保持不变
protected 继承 变为protected 变为protected 不可见 非私有成员变为protected
private 继承 变为private 变为private 不可见 非私有成员成为子类的私有成员

二分搜索(C++泛型)

使用C++模板语法,遵循C++11标准

template <typename T, typename It>
It binary_search(It beg, It end, const T &val)
{
    auto mid = beg + (end - beg) / 2;
    while (mid != end && *mid != val)
    {
        if (val < *mid)
        {
            end = mid;
        }
        else
        {
            beg = mid + 1;
        }
        mid = beg + (end - beg) / 2;
    }
    return mid;
}

测试:

int main()
{
    vector<int> v{1, 2, 3, 4, 5, 6, 7};
    auto a = binary_search(v.begin(), v.end(), 7);
    if (a != v.end())
    {
        cout << *a << endl;
    }
    return 0;
}