2019-04-27 06:09
⁄ 工业·编程
⁄ 共 3884字
十一、vector对象的列表初始化
c++11新标准提供了另外一种为vector对象的元素赋初值的方法,即列表初始化。此时,用花括号括起来的0个或多个元素值被赋给vector对象:
vector<string> v1 = {"a", "an", "the"}; //列表初始化
vector<string> v2 = ("a", "an", "the"); //错误
十二、容器的cbegin和cend函数
begin和end返回的具体类型由对象是否是常...
C++11阅读全文
2019-04-26 05:55
⁄ 工业·编程
⁄ 共 2773字
C++Primer第五版对C++11的特性做了详细的介绍,现在对其做一个大致的归纳.
一、long long类型
在C++11中,标准要求long long整型可以在不同平台上有不同的长度,但至少有64位。我们在写常数字面量时,可以使用LL后缀(或是ll)标识一个long long类型的字面量,而ULL(或ull、Ull、uLL)表示一个unsigned long long类型的字面量。比如:
long long int lli = -9000000000000000000LL;
unsigned long long int ulli = -9000000000...
C++11阅读全文
2019-04-25 15:35
⁄ 工业·编程
⁄ 共 9715字
最近研究高性能C++协程,网上了解到了魅族libgo、腾讯libco、开源libaco、boost coroutine,这里记录一下。
1 什么是协程
协程可以很轻量的在子例程中进行切换,它由程序员进行子例程的调度(即切换)而不像线程那样需要内核参与,同时也省去了内核线程切换的开销,因为一个协程切换保留的就是函数调用栈和当前指令的寄存器,而线程切换需要陷入内核态,...
libaco, libco, libgo, 协程阅读全文
2019-04-24 22:27
⁄ 工业·编程
⁄ 共 4648字
unique_ptr <>是c ++ 11提供的智能指针实现之一,用于防止内存泄漏。unique_ptr对象包含一个原始指针,并负责其生命周期。当这个对象被销毁的时候,它的析构函数会删除关联的原始指针。
unique_ptr有重载的- >和*运算符,所以它可以被用于类似于普通的指针。
示例:
#include <iostream>
#include <memory>
struct Task {
int mId;
Task(int id) : mId(id) {
std::cout ...
C++11, 指针阅读全文
2019-04-23 22:24
⁄ 工业·编程
⁄ 共 3379字
shared_ptr的主要优点是当不再使用时会自动释放相关的内存。
但是如果我们不仔细使用shared_ptr,那么这个优势就会变成一个劣势。 我们来看看:
假设我设计一个二叉树,并在其中包含一个指向左右子节点的指针。
#include <iostream>
#include <memory>
class Node {
int value;
public:
std::shared_ptr<Node> leftPtr;
std::shared_ptr<Node> rightPtr;
Node(int val) :...
C++11阅读全文
2019-04-22 22:16
⁄ 工业·编程
⁄ 共 1177字
1、尽量不要使用相同的原始指针来创建多个shared_ptr对象,因为在这种情况下,不同的shared_ptr对象不会知道它们与其他shared_ptr对象共享指针。
这样会造成什么样的问题?
设想两个shared指针由相同的原始指针创建:
int *rawPtr = new int();
std::shared_ptr<int> ptr_1(rawPtr);
std::shared_ptr<int> ptr_2(rawPtr);
假设ptr_2超出范围,那么它将删除关联的原始指针,这样ptr1就会指向一个悬挂指针。
所以,当...
C++11, 指针阅读全文
2019-04-21 22:12
⁄ 工业·编程
⁄ 共 1062字
++,--和[]操作符
相比于原始指针,shared_ptr只提供这些运算符:
1) ->, *
2) 比较运算符
但是,shared_ptr不提供
1) 指针运算比如+,-,++,--
2) Operator []
例子:
#include <iostream>
#include <memory>
struct Sample {
void dummyFunction() {
std::cout << "dummyFunction" << std::endl;
}
};
int main() {
std::shared_ptr<Sample>...
C++11, 指针阅读全文
2019-04-20 22:07
⁄ 工业·编程
⁄ 共 2332字
当一个shared_ptr对象超出作用域时,其析构函数被调用,在析构函数中,将其引用计数减1,如果引用计数的值变为0,则删除关联的原始指针。
要删除析构函数中的内部原始指针,默认情况下,shared_ptr调用delete()函数,即
delete Pointer;
但是,我们在析构函数中并不总是要使用delete函数,还可能有其他的需求。
如果shared_ptr指向一个数组而不是一个简单的指针
std::shared_ptr<int> p3(new int[12]);
在其析构函数中,s...
C++11, 指针阅读全文
2019-04-19 21:59
⁄ 工业·编程
⁄ 共 2251字
std::shared_ptr<>是c++11中引入的一种智能指针,它足够聪明,如果指针不在任何地方使用,就会自动删除指针。这可以帮助我们彻底消除内存泄露和悬挂指针的问题。
shared_ptr和共享所有权
它遵循共享所有权的概念,即不同的shared_ptr对象可以与相同的指针相关联,并且在内部使用引用计数机制来实现。
每个shared_ptr对象内部指向两块内存区域
1)指向对象
2)指向用于引用计数的控制数据
共享所有权怎样在引用计数的帮助下...
C++11, 指针阅读全文
2019-04-14 21:23
⁄ 工业·编程
⁄ 共 13228字
1.栈
1.1 栈的定义
栈是一种特殊的线性表。其特殊性在于限定插入和删除数据元素的操作只能在线性表的一端进行。如下所示:
结论:后进先出(Last In First Out),简称为LIFO线性表。
栈的基本运算有六种:
构造空栈:InitStack(S)、
判栈空: StackEmpty(S)、
判栈满: StackFull(S)、
进栈: Push(S,x)、可形象地理解为压入,这时栈中会多一个元素
退栈: Pop(S) 、 可形象地理解为弹出,弹出后栈中就无此元素了。
取栈顶元素...
数据结构阅读全文