C++容器和算法-阿里云开发者社区

开发者社区> 长征4号> 正文

C++容器和算法

简介:
+关注继续查看

转自:http://www.cnblogs.com/haiyupeter/archive/2012/07/29/2613145.html

容器:某一类型数据的集合。

C++标准顺序容器包括:vector,list,queue

容器初始化

复制代码
复制代码
        vector<int> t;
        for (int i = 0; i < 50; i ++) {
                t.push_back(i);
        }

        vector<int> c; // 空容器
        vector<int> c1(t); // 容器t的副本
        vector<int> c2(3, 4); // 3个值为4的容器
        vector<int> c3(t.begin(), t.end() - 10); // 容器t的begin()和end()-10之前的数据副本
        vector<int> c4(5); // 创建包含5个空默认值的副本
复制代码
复制代码

容器类型的规则:支持复制和赋值操作

容器的迭代访问

窗口的迭代访问非常类似指针的操作,都支持++和--的位移操作,迭代器内置了操作符重载。

复制代码
复制代码
*item
item->num
++item
item++
--item
item--
iter1 == iter2
iter1 != iter2
复制代码
复制代码

迭代器访问

复制代码
for (vector<string>::iterator iter = strs2.begin(); iter != strs2.end(); iter ++) {
        std::cout << *iter << std::endl;
    }
复制代码

迭代器的首元素迭代器和尾元素迭代器可以通过begin()和end()方法获取,并通过++方法进行迭代。

迭代器操作的API:

Iterators:

begin Return iterator to beginning (public member function )
end Return iterator to end (public member function )
rbegin Return reverse iterator to reverse beginning (public member function)
rend Return reverse iterator to reverse end (public member function)
 
容器的元素类型

Member types

of template <class T, class Allocator=allocator<T> > class vector; 

 

member type definition
reference Allocator::reference
const_reference Allocator::const_reference
iterator Random access iterator
const_iterator Constant random access iterator
size_type Unsigned integral type (usually same as size_t)
difference_type Signed integral type (usually same as ptrdiff_t)
value_type T
allocator_type Allocator
pointer Allocator::pointer
const_pointer Allocator::const_pointer
reverse_iterator reverse_iterator<iterator>
const_reverse_iterator reverse_iterator<const_iterator>

 通过reverse类型属性,可以逆序访问容器的迭代器
 

增加和删除元素

容器的API提供在具体什么位置增加或者删除元素,或者在什么元素增加或者删除元素:

Modifiers:

assign Assign vector content (public member function)
push_back Add element at the end (public member function)
pop_back Delete last element (public member function)
insert Insert elements (public member function)
erase Erase elements (public member function )
swap Swap content (public member function )
clear Clear content (public member function)

容器大小

Capacity:

size Return size (public member function)
max_size Return maximum size (public member function )
resize Change size (public member function)
capacity Return size of allocated storage capacity (public member function)
empty Test whether vector is empty (public member function)
reserve Request a change in capacity (public member function)

关联容器

C++中的关联容器包括 map 和 set
map与key, value相对应,整合起来map与pair类型对应
set 直接与 value相对应
 
同时存在multimap和multiset两个对象,支持一个key对应多个value
具体可以参考:

 

C++的容器算法

最常见的是find方法,C++中的示例:

// 包含必要的头文件

#include <algorithm>

复制代码
复制代码
vector<int> vec(2, 35);
vec.push_back(8);
vec.push_back(80);
vec.push_back(98);
vec.push_back(25);
vec.push_back(12);
vector<int>::const_iterator result = find(vec.begin(), vec.end(), 80);
std::cout << 80 << (result == vec.end() ? " is not present" : " is present") << std::endl;
复制代码
复制代码

 

 

除了少数情况下,C++的容器算法都是在一个范围内的元素进行操作。所以其参数顺序情况一般为:iter_begin, iter_end, search_value。

C++容器使用的算法与数据结构书中大致相同:

1. 只读算法(查找)

2. 写算法(排序)

3. 合并

4. 堆

5. 最大/最小值等

 

常用只读算法:

....

 

实践了fill, fill_n, back_inserter, copy, replace, sort, count_if

复制代码
复制代码
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
#include <iterator>
using namespace std;
void log(std::string log) {
    std::cout << log << std::endl;
}
void apiTest() {
}
int main()
{
    vector<int> vec(2, 10);
    vec.push_back(3);
    vec.push_back(4);
    vec.push_back(15);
    vec.push_back(45);
    vec.push_back(24);
    vec.push_back(234);
    fill(vec.begin() + 1, vec.end() - 2,3);
    fill_n(back_inserter(vec), 10, 2);
    replace(vec.end() - 5, vec.end(), 2, 8);
    vector<int>::const_iterator iter = vec.begin();
    for (;iter != vec.end();iter++) {
        std::cout << *iter << std::endl;
    }
    vector<int> vec2;
    copy(vec.begin(), vec.end(), back_inserter(vec2));
    return 0;
}
复制代码
复制代码

输出结果:

关于容器算法相关一章可参考:http://www.cplusplus.com/reference/algorithm/





本文转自夏雪冬日博客园博客,原文链接:http://www.cnblogs.com/heyonggang/p/3257140.html,如需转载请自行联系原作者

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
RDC容器构建和部署服务新功能上线
通过RDC和容器服务的集成,很好的解决了从代码提交到发布上线,及多环境流水线部署等问题
4842 0
带有通配符的字符串匹配算法-C/C++
日前某君给我出了这样一道题目:两个字符串,一个是普通字符串,另一个含有*和?通配符,*代表零个到多个任意字符,?代表一个任意字符,通配符可能多次出现。写一个算法,比较两个字符串是否相等。
684 0
关联容器操作
关联容器还定义了如下表所示的类型。这些类型表示容器关键字和值的类型。 关联容器额外的类型别名 key_type        此容器类型的关键字类型 mapped_type       每个关键字关联的类型;只适用于map value_type       对于set,与key_type相同             对于map,为pair 对于set类型,key_type和value_type是一样的;set中保存的值就是关键字。
776 0
SOCK: Serverless场景的runc容器启动优化方案
> [原文链接 SOCK: Rapid Task Provisioning with Serverless-Optimized Containers](https://www.usenix.org/system/files/conference/atc18/atc18-oakes.pdf) > 译者 据德 ### 一. 摘要 Serverless计算平台能够为用户降低生产成本以及
1529 0
Twitter上 Docker和社区就容器格式标准化争论不休
本文讲的是Twitter上 Docker和社区就容器格式标准化争论不休【编者的话】Docker的容器镜像是否应该完全标准化?Docker是否应该在公开定义的标准化革新上退缩?这是最近Twitter上, Google公司的首席布道师Kelsey Hightower和Docker创始人 Solomon Hykes之间激烈争论的话题。
1006 0
Docker的镜像和容器的区别
版权声明:本文为博主chszs的原创文章,未经博主允许不得转载。 https://blog.csdn.net/chszs/article/details/48252799 Docker的镜像和容器的区别 作者:chszs,版权所有,未经同意,不得转载。
627 0
+关注
541
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载