#include<iostream> #include<string> using namespace std; //—————————————————————————————————————————————————————————————————————— namespace LinkList { struct LinkNode{ string Item; struct LinkNode *Next; }; LinkNode *CreateNode(string item){ LinkNode *node = new LinkNode(); if(node) { node->Item = item; node->Next = NULL; } return node; } bool PushNode(LinkNode *head,string item){ LinkNode *node = CreateNode(item); if(node){ node->Next = head->Next; head->Next = node; return true; } else { return false; } } LinkNode* PopNode(LinkNode *head){ LinkNode *prev,*curr; if(head == NULL || head->Next == NULL){ return NULL; } prev = head; curr = prev->Next; while(curr->Next){ prev = curr; curr = curr->Next; } prev->Next = NULL; return curr; } bool AppendNode(LinkNode *head,string item){ LinkNode *node = CreateNode(item); if(!node){ return false; } LinkNode *tail = head; while(tail->Next != NULL){ tail = tail->Next; } tail->Next = node; return true; } LinkNode* FindNode(LinkNode *head,string item){ LinkNode *node = head->Next; while(node!=NULL){ if(node->Item == item){ return node; } else { node = node->Next; } } return NULL; } void DeleteNode(LinkNode *head,string item){ LinkNode *tail = head, *node; while(tail->Next!=NULL){ if(tail->Next->Item == item){ node = tail->Next; tail->Next = node->Next; delete(node); } else{ tail = tail->Next; } } } void DeleteAll(LinkNode *head){ if(head){ while(head->Next!=NULL){ DeleteAll(head->Next); head->Next=NULL; } delete(head); head=NULL; } } void _insert_for_sort(LinkNode *head,LinkNode *node){ LinkNode *prev = NULL,*curr; node->Next = NULL; if(head->Next == NULL){ head->Next = node; // 插入第一个数据节点 } else { curr = head->Next; prev = head; while(curr) { //如果curr为空,则目标节点最大,插在末尾 if(curr->Item > node->Item){ //找到一个节点数据比目标节点大,插在前面 break; } prev = curr; curr = curr->Next; } node->Next = prev->Next; prev->Next = node; } } void SortNode(LinkNode *head){ LinkNode *prev,*curr; if(NULL == head || NULL == head->Next){ return; } curr = head->Next; head->Next = NULL; while(curr){ prev = curr; curr = curr->Next; _insert_for_sort(head, prev); } } } //—————————————————————————————————————————————————————————————————————— int main(){ LinkList::LinkNode *head = LinkList::CreateNode(""); if(head){ LinkList::AppendNode(head,"A"); LinkList::AppendNode(head,"B"); LinkList::AppendNode(head,"C"); LinkList::PushNode(head,"D"); LinkList::AppendNode(head,"E"); LinkList::AppendNode(head,"F"); LinkList::PushNode(head,"F"); LinkList::AppendNode(head,"E"); LinkList::PushNode(head,"G"); LinkList::DeleteNode(head,"E"); LinkList::LinkNode *find = LinkList::FindNode(head,"A"); find->Item="O"; LinkList::DeleteNode(head,"M"); } if(head){ LinkList::LinkNode *test = head->Next; while(test!=NULL){ cout << test->Item << endl; test = test->Next; } } cout << endl; LinkList::SortNode(head); LinkList::LinkNode *tt = LinkList::PopNode(head); cout << tt->Item << endl; cout << endl; LinkList::DeleteAll(tt); if(head){ LinkList::LinkNode *test = head->Next; while(test!=NULL){ cout << test->Item << endl; test = test->Next; } } LinkList::DeleteAll(head); return 0; }
用valgrind查看无内存泄漏
root # valgrind ./a.out ==5602== Memcheck, a memory error detector ==5602== Copyright (C) 2002-2012, and GNU GPL'd, by Julian Seward et al. ==5602== Using Valgrind-3.8.1 and LibVEX; rerun with -h for copyright info ==5602== Command: ./a.out ==5602== G D O B C F ==5602== ==5602== HEAP SUMMARY: ==5602== in use at exit: 0 bytes in 0 blocks ==5602== total heap usage: 20 allocs, 20 frees, 430 bytes allocated ==5602== ==5602== All heap blocks were freed -- no leaks are possible ==5602== ==5602== For counts of detected and suppressed errors, rerun with: -v ==5602== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 2 from 2)
Vector数组自定义排序
#include<iostream> #include<vector> #include<algorithm> #include<string> using namespace std; class People{ public: string name; int age; public: People(string name,int age){ this->name = name; this->age = age; } bool operator < (const People &p) const{ // return name < p.name; return age < p.age; } }; bool less_operator(const People &p1, const People &p2){ // return p1.name < p2.name; return p1.age < p2.age; } int main(){ vector<People> vp; vector<People>::iterator vpi; People p1("ciaos",26); People p2("stone",25); People p3("tiger",27); People p4("apple",21); // People *p5 = new People("marks",50); //memory leak vp.push_back(p1); vp.push_back(p2); vp.push_back(p3); vp.push_back(p4); // vp.push_back(*p5); for(vpi = vp.begin();vpi != vp.end();vpi ++){ cout << (*vpi).name << " " << (*vpi).age << endl; } sort(vp.begin(),vp.end()); // sort(vp.begin(),vp.end(),less_operator); for(int i=0;i<vp.size();i++){ cout << vp[i].name << " " << vp[i].age << endl; } return 0; }
Map基本操作
#include<iostream> #include<map> #include<algorithm> #include<string> using namespace std; bool match_second(pair<int,string> data, string target){ return (data.second == target)?true:false; } int main(){ map<int,string> co; map<int,string>::iterator coi; co.insert(pair<int,string>(10086,"mobile")); co.insert(pair<int,string>(10010,"union")); co.insert(pair<int,string>(12306,"train")); co.insert(pair<int,string>(10000,"telecom")); for(coi = co.begin();coi != co.end();coi ++){ cout << (*coi).first << " " << (*coi).second << endl; } coi = co.find(10010); cout << (*coi).first << " " << (*coi).second << endl; co.erase(coi); cout << endl; coi = find_if(co.begin(),co.end(),bind2nd(ptr_fun(match_second),"train")); if(coi != co.end()) { cout << (*coi).first << " " << (*coi).second << endl; } cout << endl; for(coi = co.begin();coi != co.end();coi ++){ cout << (*coi).first << " " << (*coi).second << endl; } // sort(vp.begin(),vp.end()); // sort(vp.begin(),vp.end(),less_operator); return 0; }
相关推荐
C++/STL/读书笔记是对C++标准模板库(Standard Template Library,简称STL)深入学习的重要资源。STL是C++编程中不可或缺的一部分,它提供了高效且可重用的数据结构和算法,极大地提高了代码的编写效率和可读性。...
标题 "C/C++/STL/數據結構/LINUXC編程實例" 涵盖了几个关键的编程领域,包括C和C++语言、STL(Standard Template Library)、数据结构以及Linux C编程。让我们逐一深入探讨这些知识点。 C语言是计算机科学的基础,...
在C++中,`ETL`和`STL`是两个重要的概念,它们分别代表了不同的编程工具和技术。 `ETL`是"Extract, Transform, Load"的缩写,这在数据处理领域是一个关键术语。ETL过程通常用于大数据管理和分析,它涉及从不同来源...
在C++编程语言中,STL(Standard Template Library,标准模板库)是不可或缺的一部分,它提供了高效、便捷的数据结构和算法。STL容器是STL的核心组成部分,它们为程序员提供了组织和管理数据的方式。本节将深入探讨...
STL,全称为Standard Template Library(标准模板库),是C++编程语言中不可或缺的一部分,它为程序员提供了高效且灵活的数据结构和算法。STL的主要组件包括容器、迭代器、算法和函数对象,这些组件共同构成了一个...
在C++中,STL(Standard Template Library,标准模板库)为实现这些数据结构提供了强大的工具。STL由一系列模板类和函数组成,包括容器、迭代器、算法和仿函数等组成部分。 1. 容器:STL中的容器是用于存储数据的...
在C++中,标准模板库(STL)提供了一个名为`list`的容器,它实现了双向链表。双向链表允许我们在O(1)的时间复杂度内进行前向或后向遍历,这对于我们的任务来说非常方便,因为我们需要遍历整个文本并统计单词。 接...
在这个“数据结构课程设计案例精编(C++/STL)”中,我们将深入探讨使用C++编程语言以及STL(Standard Template Library,标准模板库)来实现各种经典数据结构及其算法。 首先,C++是一种强大且灵活的面向对象编程...
C/C++ STL(Standard Template Library,标准模板库)是C++编程语言中不可或缺的一部分,它提供了高效、可重用的数据结构和算法。STL的主要组件包括容器、迭代器、算法和函数对象,这些组件共同构成了一个强大的工具...
**C++标准库STL手册** C++标准模板库(STL)是C++编程语言中的一个重要组成部分,它提供了一组高效、可重用的容器、迭代器、算法和函数对象,大大简化了数据结构和算法的实现。STL手册通常会详细阐述这些组件的使用...
在C++编程中,库函数和STL(Standard Template Library,标准模板库)是不可或缺的组成部分,它们极大地提升了代码的效率和可读性。本文将深入探讨C++库函数和STL算法,以及如何在实际编程中应用这些概念。 首先,...
C++ STL(Standard Template Library,标准模板库)是C++库的核心部分,它包含了一系列高效、泛型的容器(如`std::vector`、`std::list`)、迭代器、算法和函数对象。STL的目标是提供一组工具,使得开发者能够以简洁...
C++ STL,全称为Standard Template Library(标准模板库),是C++编程语言中不可或缺的一部分,为程序员提供了高效且灵活的数据结构和算法。STL的主要组件包括容器(如vector、list、set等)、迭代器、算法和函数...
链表是一种基础且重要的数据结构,它在计算机科学中扮演着关键角色,特别是在C++这样的编程语言中。链表与数组不同,不依赖于连续的内存空间,而是通过节点之间的指针连接。在这个"c++对链表建立,查找,删除处理"的...
C++中的STL,全称为Standard Template Library(标准模板库),是C++编程语言中一个极其重要的组成部分。它提供了一组高效、灵活且可重用的容器、算法和迭代器等编程工具,大大简化了复杂的数据结构操作和算法实现。...
尽管《C/C++参考手册》未包含STL的算法部分,但STL的容器如`std::vector`(动态数组)和`std::list`(双向链表)是值得深入研究的。它们允许开发者以抽象的方式处理数据集合,而无需关注底层实现的细节。 STL的迭代...