`
_Yggd
  • 浏览: 89169 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

C++之容器实例

    博客分类:
  • C++
 
阅读更多

这几天在实习,经理要求用C++MFC做出五子棋的单机版、局域网版、还有网络大厅版本,趁这个机会赶紧复习了C++关于C++的STL小例子如下:




标准模板库STL应用举例

向量 vector

线性表 list  

队列 queue

映射 map

字符串string

 
1:向量vector类可用来支持动态数组,动态数组是指可以根据需要改变大小的数组。
 
可以很容易地声明一个vector类对象,例如:
vector <int> iv;
vector <int> cv(5);
vector <int> cv(5,’x’);
vector <int> iv2(iv);
// Access a vector using an iterator.
#include <iostream>
#include <vector>
using namespace std;
int main( )
{
  vector<char> v; // create zero-length vector
  int i;
 
  // put values into a vector
  for(i=0; i<10; i++) v.push_back('A' + i);  
// can access vector contents using subscripting
  for(i=0; i<10; i++) cout << v[i] << " ";
  cout << endl;
 
  // access via iterator
  vector<char>::iterator p = v.begin( );
  while(p != v.end()) {
    cout << *p << " ";
    p++;
  }
  return 0;
}
2:
线性表 list 类定义了双向的线性表, 又可称为双向链表。List类只支持顺序访问。
 
下面的C++程序通过实例化链表list类模板建立了一个保存字符的链表,接着使用类模板的排序方法sort( )进行排序,然后输出经过排序后的字符。
// Sort a list.
#include <iostream>
#include <list>
#include <cstdlib>
using namespace std;
 
int main()
{ int i;
  list<char> lst;  
  // create a list of random characters
  for(i=0; i<10; i++)
    lst.push_back('A'+ (rand()%26));  
cout << "Original contents: ";
  list<char>::iterator p = lst.begin();
  while(p != lst.end()) {
    cout << *p;
    p++;
  }
  cout << endl << endl;
 
  // sort the list
  lst.sort( );  
cout << "Sorted contents: ";
  p = lst.begin();
  while(p != lst.end()) {
    cout << *p;
    p++;
  }  
  return 0;
}
3:
映射map类定义了一个关联容器,并且在容器中使用唯一的关键字来映射相应的值。
map类对象是一系列关键字/值的匹配对。
map的功能在于:只要知道了一个值的关键字,就可以找到这个值。
下面的实例程序通过实例化标准库中的map类模板映射建立了一些英文单词与其反义词的对应关系,利用这种对应系可以迅速查找到一个词的反义词。
// A map of word opposites, using strings.
#include <iostream>
#include <map>
#include <string>
using namespace std;
 
int main( )
{ int i;
  map<string, string> m;
 
  m.insert(pair<string, string>("yes", "no"));
  m.insert(pair<string, string>("up", "down"));
  m.insert(pair<string, string>("left", "right"));
  m.insert(pair<string, string>("good", "bad"));  
string s;
  cout << "Enter word: ";
  cin >> s;
 
  map<string, string>::iterator p;
  
  p = m.find(s);
  if(p != m.end()) 
    cout << "Opposite: " << p->second;
  else
    cout << "Word not in map.\n";
 
  return 0;
}
4:
队列(queue)是一个先进先出(FIFO: First In First Out)的数据结构,在程序设计中经常使用。
 
对一个队列常用的操作有,在队列尾增加一个元素、在队列头取一个元素以及测试队列是否为空、是否为满等操作。
Using queue class in the Standard C++ Library, Instantiate a queue for strings and demonstrate the following functions in main( ) to show that you know how to use this class:
queue::push( )
queue::pop( )
queue::empty( )
queue::front( ) 
queue::back( )
queue::size( )
#include <iostream>
#include <queue>
#include <string>
using namespace std;
void main( )
{queue<string> str_queue;
str_queue.push("string1");
str_queue.push("string2");
str_queue.push("string3");
cout<<"the size of the queue is: "<<str_queue.size()<<endl;
cout<<"the front one "<<str_queue.front()<<endl;
cout<<"the back one "<<str_queue.back()<<endl;
str_queue.pop( );
str_queue.pop( );
str_queue.pop( );
if (str_queue.empty( ))
cout<<" the queue is empty!"<<endl;
}
5:
C++提供了两种处理字符串的方法:
以空字符‘\0’结尾的字符数组
容器类string类的对象(标准库中的string类)
 
使用标准库中的string类的三个理由:
一致性(字符串定义为一种数据类型)
方便性(可以使用标准的运算符)
安全性(不会出现数组越界错误)
//  Demonstrate insert(), erase(), and replace().
#include <iostream>
#include <string>
using namespace std;
 
int main()
{
  string str1("This is a test");
  string str2("ABCDEFG");
 
  cout << "Initial strings:\n";
  cout << "str1: " << str1 << endl;
  cout << "str2: " << str2 << "\n\n";  
// demonstrate insert()
  cout << "Insert str2 into str1:\n";
  str1.insert(5, str2);
  cout << str1 << "\n\n";
 
  // demonstrate erase()
  cout << "Remove 7 characters from str1:\n";
  str1.erase(5, 7);
  cout << str1 <<"\n\n";
  
// demonstrate replace 
  cout << "Replace 2 characters in str1 with str2:\n";
  str1.replace(5, 2, str2);
  cout << str1 << endl;
  
  return 0;
}
结果:
Initial strings:
str1: This is a test
str2: ABCDEFG
 
Insert str2 into str1:
This ABCDEFGis a test
 
Remove 7 characters from str1:
This is a test
 
Replace 2 characters in str1 with str2:
This ABCDEFG a test
 

 

分享到:
评论

相关推荐

    C++编程实例100篇

    C++的面向对象特性是其强大之处。类和对象是面向对象编程的核心,类定义了对象的属性和行为,而对象是类的实例。封装、继承和多态是面向对象的三大特性。封装将数据和操作数据的方法捆绑在一起,保护数据不受外部...

    c++STL学习——各种容器的技术总结和用法代码实例

    在"c++STL学习——各种容器的技术总结和用法代码实例"中,我们将深入探讨C++ STL的容器部分。 1. 容器概览: C++ STL中的容器是一些类模板,用于存储和管理元素集合。常见的容器有向量(vector)、列表(list)、...

    Visual C++ 项目开发实例自学手册

    同时,Visual C++也支持标准C++库,因此读者可能会接触到STL(Standard Template Library)中的容器、算法和迭代器,这些工具能够帮助编写出更简洁、高效的代码。 在项目开发实例部分,可能包含了一些实际应用,如...

    C++编程实例100篇 C++编程实例100篇

    6. **STL(标准模板库)**:STL是C++的标准库,包含了容器(如vector、list、set)、迭代器、算法和函数对象。通过实例,你可以学习如何利用STL提高代码效率。 7. **异常处理**:C++的异常处理机制用于捕获和处理...

    C++编程实例100篇 C++软件源码.zip

    标准库的使用也是C++编程的一部分,例如STL(Standard Template Library)中的容器(如vector、list、set、map)和算法(如排序、查找)等,这些在实例中会有具体的应用。 最后,C++11及后续标准引入了许多新特性,...

    C++高级编程实例电子书

    其次,C++的内存管理是其高级特性的核心之一。书中将讲解如何使用指针进行动态内存分配和释放,以及智能指针(如unique_ptr、shared_ptr)的使用,这些内容对于避免内存泄漏和提高程序的稳定性至关重要。此外,还将...

    C++项目实例案例

    4. **指针**:C++中的指针能够直接访问内存地址,是其强大之处,但也是初学者的难点。理解指针的声明、操作以及指针与对象的关系至关重要。 5. **动态内存管理**:包括动态分配和释放内存(new和delete操作),以及...

    C++编程实例100篇.zip

    7. **实例25**:可能展示了C++的STL(标准模板库)使用,包括容器(如vector、list、set)、迭代器、算法和函数对象等,这些都是提高代码效率和可读性的强大工具。 8. **实例34**:可能涵盖了多线程编程。C++11引入...

    27个经典趣味C++程序实例

    3. **类与对象**:C++的核心特性之一就是面向对象编程,实例中的类设计和对象使用将让你深入理解封装、继承和多态的概念。 4. **输入/输出操作**:标准输入输出流(iostream库)的使用,如cin和cout,以及文件输入...

    Visual C++ 6.0 编程实例与技巧

    同时,作者可能会强调STL(Standard Template Library)的使用,这是C++中的一个重要库,包含容器、迭代器、算法和函数对象,极大地提高了代码的可复用性和效率。 在深入探讨编程技巧部分,读者将接触到内存管理、...

    Visual C++MFC编程实例

    《Visual C++ MFC编程实例》是一本深入探讨使用Microsoft Foundation Classes (MFC)库进行Windows应用程序开发的实践指南。MFC是微软为简化C++程序员在Windows环境下开发图形用户界面应用程序而设计的一个类库,它...

    C++学习系列教程之C++编程实例详解

    本教程“C++学习系列教程之C++编程实例详解”旨在通过一系列实例,帮助初学者深入理解和掌握C++的核心概念和技术。 1. **基础语法**:C++的基础包括变量声明、数据类型(如int、char、float、double等)、运算符...

    Visual C++开发实例大全(提高卷)光盘源码

    3. **C++标准库**:包括STL(Standard Template Library),如容器(vector、list、set等)、迭代器、算法和函数对象,这些都是高效编程的重要组成部分。 4. **异常处理**:Visual C++支持C++的异常处理机制,学习...

    C++模板,容器 (STL)用法意义实例

    C++容器(STL) 标准模板库(Standard Template Library, STL)中的容器是一组预定义的类,它们提供了对动态大小的数据结构的抽象。STL容器包括数组、向量、列表、链表、集合、映射等,每种容器都有其特定的用途和...

    C++编程 C++经典实例200例

    8. **STL(标准模板库)**: STL是C++库的一部分,包含容器(如vector、list、map等)、迭代器、算法和函数对象。通过实例,你可以学习如何有效地利用这些工具解决实际问题。 9. **文件操作**: C++提供了读写文件的...

    C/C++数据结构实例实现

    本资源“C/C++数据结构实例实现”提供了C和C++语言实现的各种数据结构的实例,虽然有些可能没有完整功能,但它仍能作为学习和理解数据结构的宝贵资料。 首先,我们来探讨数据结构的基本概念。数据结构是存储和管理...

    Visual C++系统开发实例精粹 代码

    《Visual C++系统开发实例精粹》是一本深入讲解使用Microsoft Visual C++进行系统开发的书籍,其随书源代码提供了丰富的实例,旨在帮助读者从基础到高级逐步掌握C++编程和系统开发技术。这本书涵盖了从基本的语法、...

    Visual C++ 2005编程实例精粹 源代码

    3. **STL和智能指针**:STL(Standard Template Library)是C++的标准模板库,包含容器(如vector、list、set)、迭代器、算法和函数对象等。智能指针(如auto_ptr、unique_ptr、shared_ptr)是C++中管理内存的新...

    C++程序设计实例与操作

    此外,你还会接触到STL(Standard Template Library,标准模板库),这是C++的一个强大工具箱,包含了容器(如vector、list、map等)、迭代器、算法和函数对象等。STL极大地提高了代码的可读性和复用性,降低了编程...

Global site tag (gtag.js) - Google Analytics