stl

Codeblocks调试STL——gdb with python support

夙愿已清 提交于 2020-03-07 12:22:56
一、Codeblocks调试STL的问题: 不管你是Windows还是Linux的C/C++程序员,C::B都是一个非常不错的集成开发环境,如果你经常使用STL,你会发现C::B对STL的调试支持很差,其实这并不是Codeblocks的问题,而是GDB本身对STL的支持太差。我们可以看到下图情况: 但是对于一些复杂程序我们有时不得不使用调试观察程序运行情况,然而而STL又是我们编写C++程序一个不可缺少的工具,那我们该如何是好呢?有一个很笨的,但是万能的调试方法,就是输出调试,如果熟练这种调试方法会让我们非常迅速找到BUG,但是对于学习他人程序,以及大多数程序员来说但不调试还是有必要的,所以这里介绍一下怎么用python脚本来支持GDB,从而达到完美支持调试STL的目的。 二、如何在Codeblocks下使用: 1、我们可以在 http://qp-gcc.googlecode.com/files/gdb-7.2.7z (MinGW GDB build with python support, also include wx and stl pretty printer 2010-09-05更新),这个打包文件已经包含了所有需要用到的python的文件,所以你不需要再下载python运行环境。也可以在 http://code.google.com/p/qp-gcc/downloads

STL标准入门详解

本秂侑毒 提交于 2020-03-07 06:49:43
第一部分:(参考百度百科) 一、STL简介 STL(Standard Template Library,标准模板库)是惠普实验室开发的一系列软件的统称。它是由Alexander Stepanov、Meng Lee和 David R Musser在惠普实验室工作时所开发出来的。现在虽说它主要出现在C++中,但在被引入C++之前该技术就已经存在了很长的 一段时间。 STL的代码从广义上讲分为三类:algorithm(算法)、container(容器)和iterator(迭代器),几乎所有的代码都采用了模板类 和模版函数的方式,这相比于传统的由函数和类 组成的库来说提供了更好的代码重用机会。在C++标准中,STL被组织为下面的13个头文 件:<algorithm>、<deque>、<functional>、<iterator>、<vector>、<list>、<map>、 <memory>、<numeric>、<queue>、<set>、<stack>和<utility>。 二、算法 大家都能取得的一个共识是函数库对数据类型的选择对其可重用性起着至关重要的作用。举例来说,一个求方根的函数,在使用浮 点数作为其参数类型的情况下的可重用性肯定比使用整型作为它的参数类性要高。而C++通过模板的机制允许推迟对某些类型的选 择,直到真正想使用模板或者说对模板进行特化的时候

Effective STL 学习笔记 39 ~ 41

牧云@^-^@ 提交于 2020-03-07 06:46:09
Effective STL 学习笔记 39 ~ 41 /*--> */ /*--> */ */ /*--> */ Table of Contents Make Predicate pure Function Make Functor classes adaptable ptr_fun, mem_fun and mem_fun_ref 1 Make Predicate pure Function 纯函数 (Pure Function) 是指输出仅在输入变化时才发生变化的的函数,换句话说,该类型函数的输出不依赖于输入之外的任何东西,例如自身状态或者全局变量。这也是 Functional Programming 中的一个重要概念。 C++ 中用于 STL 算法的 Functor 是一些 Predicate Class ,这些 Class 的 operator() 是预测函数,这些 Predicate Class 的 operator() 也应该是纯函数,且不能修改 Class 内部成员变量 —— 换句话说,典型的 Const Member Function。 Predicate Functions should be pure function. Predicate Class should make operator() const member function. 2 Make

C++ STL之vector用法总结

北战南征 提交于 2020-03-07 02:54:34
来源:https://www.cnblogs.com/zhonghuasong/p/5975979.html 介绍 vector是表示可变大小数组的序列容器。 就像数组一样,vector也采用的连续存储空间来存储元素。也就是意味着可以采用下标对vector的元素进行访问,和数组一样高效。但是又不像数组,它的大小是可以动态改变的,而且它的大小会被容器自动处理。 本质讲,vector使用动态分配数组来存储它的元素。当新元素插入时候,这个数组需要被重新分配大小为了增加存储空间。其做法是,分配一个新的数组,然后将全部元素移到这个数组。就时间而言,这是一个相对代价高的任务,因为每当一个新的元素加入到容器的时候,vector并不会每次都重新分配大小。 vector分配空间策略:vector会分配一些额外的空间以适应可能的增长,因为存储空间比实际需要的存储空间更大。不同的库采用不同的策略权衡空间的使用和重新分配。但是无论如何,重新分配都应该是对数增长的间隔大小,以至于在末尾插入一个元素的时候是在常数时间的复杂度完成的。 因此,vector占用了更多的存储空间,为了获得管理存储空间的能力,并且以一种有效的方式动态增长。 与其它动态序列容器相比(deques, lists and forward_lists), vector在访问元素的时候更加高效,在末尾添加和删除元素相对高效

STL—map

前提是你 提交于 2020-03-06 19:49:27
摘自百度百科 1,定义:Map是STL 的一个关联容器,它提供一对一(其中第一个可以称为关键字,每个关键字只能在map中出现一次,第二个可能称为该关键字的值)的数据处理能力, 由于这个特性,它完成有可能在我们处理一对一数据的时候,在编程上提供快速通道。 2,这里说下map内部数据的组织,map内部自建一颗红黑树(一种非严格意义上的平衡二叉树),这颗树具有对数据自动排序的功能, 3,map的构造函数 map<int,string> maphai; map<char,int> maphai; map<string,char> mapstring; map<string,int> mapstring; map<int,char>mapint; map<char,string>mapchar;    // 照我理解,这个应该是 前面 映射 后面 #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib.h> #include<vector> #include<map> using namespace std; int main(void) { vector<char> a{ 'B', 'C' }; vector<char> b{ 'A', 'C', 'D' }; vector<char> c{ 'A', 'B',

STL容器之map

孤街浪徒 提交于 2020-03-06 07:46:58
map可以理解为之中关联数组,之所以称为关联是因为map是通过键值来访问,而不是通过元素在数组中的位置来访问。 map的键类型必须满足严格弱排序,解释一下: 1.当键值与自身比较时,一定产生false结果 2.两个键不能相互小于,而且如果 k1<k2, k2<k3 那么 k1<k3 3.如果两个键值相互不小于,则视为相等 map定义的类型: map<k, v>::key_type;键的类型 map<k, v>::mapped_type;键所关联值的类型 map<k, v>::value_type;一个pair类型,pair类型就是包含两个类型的一种模板类型,这两种类型不要求相同,例如 pair<string, string> a;它具有两个共有数据成员,first和second。说回value_type,它的first元素具有const map<k, v>::key_type类型,second元素具有const map<k, v>::mapped_type类型 map的构造函数有有如下三种: map<k, v> m;//空的map,键和值类型分别为k和v map<k, v> m(m2);//初始化m为m2的副本,m2与m必须有相同的k,v类型 map<k, v> m(b, e);//创建m,存储迭代器b和e标记范围内元素的副本,元素的类型必须能转换为pair<const k, v

STL专题-栈

天涯浪子 提交于 2020-03-05 10:23:57
# include <iostream> # include <cstdio> # include <string> # include <queue> # include <stack> # include <algorithm> # include <cmath> # include <list> # include <cstdlib> # include <cstring> using namespace std ; int main ( ) { string s ; int t ; cin >> t ; getchar ( ) ; while ( t -- ) { getline ( cin , s ) ; //输入空格需要用getline int len ; len = ( int ) s . size ( ) ; stack < char > st ; for ( int i = 0 ; i < len ; i ++ ) { if ( s [ i ] != ' ' ) { st . push ( s [ i ] ) ; //持续入栈 } if ( s [ i ] == ' ' || i == len - 1 ) { //遇到空格或栈满的情况 while ( ! st . empty ( ) ) { //栈非空 printf ( "%c" , st . top ( ) )

STL-栈&队列FIFO,FILO

陌路散爱 提交于 2020-03-05 10:12:52
# include <iostream> # include <cstdio> # include <string> # include <queue> # include <stack> # include <algorithm> # include <cmath> # include <list> # include <cstdlib> # include <cstring> using namespace std ; int main ( ) { int t ; cin >> t ; while ( t -- ) { int n ; cin >> n ; string s1 , s2 ; cin >> s1 ; if ( s1 == "FIFO" ) { queue < int > qu ; while ( n -- ) { cin >> s2 ; if ( s2 == "IN" ) { int num ; cin >> num ; qu . push ( num ) ; } else { if ( qu . empty ( ) ) { cout << "None" << endl ; } else { cout << qu . front ( ) << endl ; qu . pop ( ) ; } } } } else { stack < int > st ; while

Iterate through template parameter

只谈情不闲聊 提交于 2020-03-05 02:07:31
问题 I have a function that receives a template parameter. template<class Container> void function(const Container& object) { //here i want to iterate through object and print them } int main() { function(std::vector<int>{1,3,6,7}); function(std::vector<std::vector<int>>{{1,2,3},{2,5,7}}); } Is it possible to do this in one function? Suppose the container argument will be integer. 回答1: One example: template<class T> void print(T const& object) { std::cout << object; } template<class... Args> void

[STL] 遍历删除两个vector中交集

强颜欢笑 提交于 2020-03-05 01:27:20
1 #include <vector> 2 #include <string> 3 #include <algorithm> 4 5 using namespace std; 6 7 int main() 8 { 9 vector<string> vStr1; 10 vStr1.push_back("001"); 11 vStr1.push_back("002"); 12 vStr1.push_back("003"); 13 14 vector<string> vStr2; 15 vStr2.push_back("001"); 16 vStr2.push_back("002"); 17 18 /* 19 for ( auto itr=vStr2.begin(); itr!=vStr2.end(); ++itr ) 20 { 21 auto itrFind=find(vStr1.begin(),vStr1.end(),*itr); 22 if ( itrFind != vStr1.end() ) 23 { 24 vStr1.erase(itrFind); 25 } 26 } 27 */ 28 29 for ( auto itr=vStr1.begin(); itr!=vStr1.end(); ) 30 { 31 if ( find(vStr2.begin(),vStr2.end(),