C++学习15:侯捷C++标准库和C++11入门

1 粗看STL

程序=数据结构+算法
数据结构:容器Containers
算法:Algorithms
容器和算法在C++标准库中给了定义,要看懂,要会用,要常用。
在这里插入图片描述

2 C++11有助于使用的三个主题

2.1 variadic templates,数量不定的模板参数

语法:typename…,这三个点已经成为了语言的一部分。

void print()
{
}

template<typename T, typename... Types>
void print(const T& firstArg, const Type&... args)
{
    cout<<firstArg<<endl;
    print(args...);
}

print(7.5, "hello", bitset<16>(377), 42);

编译器理解上面代码的方式:print这个模板函数接受“两组”参数。第一组只有一个,即T,代码中是firstArg。第二组可以是任意个,个数有几个不知道。函数print递归调用自己,分为1个和其他这样处理。当第二组参数个数为0时,调用的就是上面第一行的print函数了。

…就是一个所谓的pack(包)
用于template parameters, 就是template parameters pack(模板参数包)
用于function parameter types, 就是function parameter types pack(函数参数类型包)
用于function parameters, 就是function parameters pack(函数参数包)
如果想知道一包是几个,可以在 variadic templates中, 关键字**sizeof…()**可以做到。

2.2 auto

不用管一个对象的类型,让编译器自己推理其类型。

list<string> c;
...
list<string>::iterator ite;
ite = find(c.begin(), c.end(), target);

为了方便,可以用auto

list<string> c;
...
auto ite = find(c.begin(), c.end(), target);//正确写法

auto ite;									//错误写法
ite = find(c.begin(), c.end(), target);

可以说,如果每次声明的时候都赋值时,所有的变量都用auto是可以的,但不推荐初学者这样使用。

2.3 ranged_base for

遍历的情况下,for的循环中,有一种新的形式,一个单冒号。

for(decl : coll)//decl是一个变量,coll是一个容器
{
    statement
}

将coll中的每一个元素,都依次copy或设定到左边的变量中,用于for的遍历。
使用如下:

for(int i : {2, 3, 5, 7, 9, 13, 17, 19})
{
    cout<< i << endl;
}

vector<double> vec;

for(auto elem : vec)//pass by value
{
    cout << elem << endl;
}

for(auto& elem : vec)// pass by reference
{
    elem *= 3;
}

上面的后两个例子中,有pass by value和pass by reference两种形式。值传递就是浅层的拷贝;而引用传递是在底层直接进行修改,影响的是真正原来的东西。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值