相关疑难解决方法(0)

标准容器的复杂性保证是什么?

显然;-)标准容器提供某种形式的保证.

什么类型的保证以及不同类型的容器之间究竟有什么区别?

从工作的SGI页(约STL)我想出了这一点:

Container Types:
================
Container:
    Forward Container
        Reverse Container
            Random Access Container
    Sequence
        Front Insert Sequence
        Back  Insert Sequence
    Associative Container
        Simple   Associative Container
        Pair     Associative Container
        Sorted   Associative Container
        Multiple Associative Container

Container Types mapped to Standard Containers
=============================================

std::vector:    Sequence    Back        Sequence                    Forward/Reverse/Random Container
std::deque:     Sequence    Front/Back  Sequence                    Forward/Reverse/Random Container
std::list:      Sequence    Front/Back  Sequence                    Forward/Reverse Container
std::set:       Sorted/Simple/Unique    Associative Container       Forward Container
std::map:       Sorted/Pair/Unique      Associative Container       Forward Container
std::multiset:  Sorted/Simple/Multiple  Associative Container …
Run Code Online (Sandbox Code Playgroud)

c++ big-o containers stl

153
推荐指数
2
解决办法
12万
查看次数

在std :: vector :: erase()和std :: deque :: erase()中复制/移动赋值

在回答的过程中的另一个问题,我偶然发现稍有不同的措辞为std::vector::erase()std::deque::erase().

这就是C++ 14所说的std::deque::erase([deque.modifiers]/4-6强调我的):

效果: ......

复杂性:对析构函数的调用次数与擦除的元素数相同,但对赋值运算符的调用次数不超过删除元素之前的元素数量和次要元素数量之后的次数.擦除元素.

抛出:除非复制构造函数,移动构造函数,赋值运算符或移动赋值运算符抛出异常,否则无效T.

以下是关于std::vector::erase([vector.modifiers]/3-5)的内容:

效果: ......

复杂性:的析构函数T被调用的次数等于擦除的元件的数量的数量,但该移动赋值运算符T被称为的次数等于在向量元素的擦除元件后的数目的数目.

抛出:除非复制构造函数,移动构造函数,赋值运算符或移动赋值运算符抛出异常,否则无效T.

正如您所看到的,两者的异常规范是相同的,但是为了std::vector明确提到它,调用了移动赋值运算符.

还有的要求TMoveAssignableerase()两者的工作std::vectorstd::deque(表100),但这并不意味着移动赋值运算符的存在:一个可以定义一个拷贝赋值运算符,而不是定义移动赋值操作符,而这个班会是MoveAssignable.

为了以防万一,我检查了GCC和Clang,std::vector::erase()如果没有移动赋值运算符,确实调用了复制赋值运算符,并且std::deque::erase()执行相同的操作(DEMO).

所以问题是:我错过了什么,或者这是标准中的(编辑)问题?

更新: 我已经提交了LWG问题#2477.

c++ language-lawyer c++14

135
推荐指数
1
解决办法
4084
查看次数

标签 统计

c++ ×2

big-o ×1

c++14 ×1

containers ×1

language-lawyer ×1

stl ×1