分享

C++容器类常用泛型函数

 liyan1371 2014-06-10
Functions in <algorithm>
count()函数的一个例子:
// count algorithm example
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;

int main () {
  int mycount;

  // counting elements in array:
  int myints[] = {10,20,30,30,20,10,10,20};   // 8 elements
  mycount = (int) count (myints, myints+8, 10);
  cout << "10 appears " << mycount << " times.\n";

  // counting elements in container:
  vector<int> myvector (myints, myints+8);
  mycount = (int) count (myvector.begin(), myvector.end(), 20);
  cout << "20 appears " << mycount  << " times.\n";

  return 0;
}
 
find()函数的一个例子:
InputIterator find ( InputIterator first, InputIterator last, const T& value );
// find example
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;

int main () {
  int myints[] = { 10, 20, 30 ,40 };
  int * p;

  // pointer to array element:
  p = find(myints,myints+4,30);
  ++p;
  cout << "The element following 30 is " << *p << endl;

  vector<int> myvector (myints,myints+4);
  vector<int>::iterator it;

  // iterator to vector element:
  it = find (myvector.begin(), myvector.end(), 30);
  ++it;
  cout << "The element following 30 is " << *it << endl;

  return 0;
}
find_first_of()的例子
// find_first_of example
#include <iostream>
#include <algorithm>
#include <cctype>
#include <vector>
using namespace std;

bool comp_case_insensitive (char c1, char c2) {
  return (tolower(c1)==tolower(c2));
}

int main () {
  int mychars[] = {'a','b','c','A','B','C'};
  vector<char> myvector (mychars,mychars+6);
  vector<char>::iterator it;

  int match[] = {'A','B','C'};

  // using default comparison:
  it = find_first_of (myvector.begin(), myvector.end(), match, match+3);

  if (it!=myvector.end())
    cout << "first match is: " << *it << endl;

  // using predicate comparison:
  it = find_first_of (myvector.begin(), myvector.end(),
                      match, match+3, comp_case_insensitive);

  if (it!=myvector.end())
    cout << "first match is: " << *it << endl;
  
  return 0;
}

reverse()实现逆转
reverse_copy()实现逆转,不改变原来的字符串
sort()
unique()
erase()
repalce()
replacse_copy()
不改变原来的字符串或者是容器的内容
strlwr()将字符串变小写
strupr()将字符串变大写
strcmp()两个参数只能是c字符串,不能是string类型,也可以用s.data()

template <class T> const T& max ( const T& a, const T& b );
template <class T, class Compare>
const T& max ( const T& a, const T& b, Compare comp );
find_if()函数的例子:
// find_if example
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;

bool IsOdd (int i) 
{
  return ((i%2)==1);
}

int main () {
  vector<int> myvector;
  vector<int>::iterator it;

  myvector.push_back(10);
  myvector.push_back(25);
  myvector.push_back(40);
  myvector.push_back(55);

  it = find_if (myvector.begin(), myvector.end(), IsOdd);
  cout << "The first odd value is " << *it << endl;

  return 0;
}


map容器的操作:
begin()返回指向第一个元素的迭代器
end()返回指向最后一个元素的迭代器
rbegin()返回指向最后一个元素的迭代器
rend()返回指向第一个元素的迭代器
empty()测试map容器是不是空的
size()返回容器的大小
max_size()返回容器最大的容量,这个是相对于内存来讲的
insert()向容器中插入元素
erase(it)删除容器当中it指向的元素,it为迭代器
erase('c')删除容器中键值为'c'的元素
eras(it, mymap.end())删除容器中it和mymap.end()之间的元素,它们两个都是迭代器
foo.swap(bar)交换容器foo和bar中的元素
clear()清空容器
find('b')返回指向键值为'b'的的迭代器,没有的话就指向end()
count('c')查找键值为'c'的元素,在map中返回0或者1,0表示没有这个键值,1表示有,但是在mutimap中就是这个键值出现的次数
lower_bound('b')返回指向键值为'b'的迭代器,当没有这个键值时就返回空的迭代器
upper_bound('b')返回指向键值为'b'的下一个元素的迭代器,没有的话就返回空的迭代器


vector容器的操作:
begin()返回指向第一个元素的迭代器
end()返回指向最后一个元素的迭代器
rbegin()返回指向最后一个元素的迭代器
rend()返回指向第一个元素的迭代器
size()返回容器的元素的个数
max_size()返回容器的最大的元素的个数
resize()重新调整容器的容量,无论原来的容量是大于还是小于后来的恶容量都可以
myvector.resize(5);将容器的容量调整为5,如果变短了就直接删除多余的元素,长了就用0将剩余的空间填满
myvector.resize(8,100);将容器的容量调整8,并将多出来的位置用100表示
myvector.resize(12);将容器的容量调整为12,多出的空间用0填充
capacity()返回这个容器在内存空间中最多的连续空间
empty()测试这个容器是不是空的
reserve()重新调整容器的capacity
at(i)返回位置为i处得元素的引用,当超出容器的最后一个位置就抛出一个异常
front()返回第一个元素的引用
back()返回最后一个元素的引用
void assign ( InputIterator first, InputIterator last );将迭代器first和迭代器last之间的元素付给调用这个方法的容器
void assign ( size_type n, const T& u );将n个u付给容器
push_back()在容器的末尾添加元素
pop_back()删除容器最后面的一个元素
iterator insert ( iterator position, const T& x );在迭代器position的前面插入元素x
void insert ( iterator position, size_type n, const T& x );在position的前面插入n个x
template <class InputIterator>
void insert ( iterator position, InputIterator first, InputIterator last );将迭代器first和last之间的元素插入到position前面
iterator erase ( iterator position );删除迭代器position指向的元素
iterator erase ( iterator first, iterator last );删除迭代器first和last之间的元素,不包括last指向的元素
void swap ( vector<T,Allocator>& vec );交换两个容器的元素
void clear ( );清空容器当中的元素


set容器(只存储值不相同的元素,并且按照从小到大的顺序排列)
iterator begin ();返回指向set容器第一个元素的迭代器
iterator end ();返回指向容器最后一个元素的迭代器
reverse_iterator rbegin();返回指向容器最后一个元素的迭代器
reverse_iterator rend();返回指向容器第一个元素的迭代器
bool empty ( ) const;测试容器是否为空
size_type size() const;计算容器当中元素的个数
size_type max_size () const;计算容器的最大容量
pair<iterator,bool> insert ( const value_type& x );将元素x插入到set容器中返回pair对象,first元素为指向插入的元素的迭代器,second元素为指示插入成功与否的bool值
iterator insert ( iterator position, const value_type& x );将x插入
template <class InputIterator>
void insert ( InputIterator first, InputIterator last );将first与last只见到恶元素插入到容器中
void erase ( iterator position );删除position位置处得元素
size_type erase ( const key_type& x );删除值为x的元素
void erase ( iterator first, iterator last );删除迭代器first和last之间的元素
void swap ( set<Key,Compare,Allocator>& st );交换两个set容器的元素
void clear ( );清空set容器




容器迭代器的操作
stack栈的操作:
bool empty ( ) const;测试栈是不是空的返回1表示空0表示非空
size_type size ( ) const;返回当前栈的元素的个数
value_type top ( );返回当前的栈顶元素,不删除这个元素
const value_type top ( ) const;返回栈顶元素的const引用
void push ( const T& x );将当前的元素x入栈
void pop ( );删除栈顶元素

queue队列的操作:
bool empty ( ) const;测试当前队列是不是空,0表示空,1表示非空
size_type size ( ) const;队列的元素的个数
value_type& front ( );返回队首元素的引用
const value_type front ( ) const;返回队首元素的const值
value_type& back ( );返回队尾元素的引用
const value_type& back ( ) const;返回队尾元素的const值
void push ( const T& x );将x入队列
void pop ( );删除队首元素



string类型的应用
string.c_str() 返回的是const char*而非char *,如果想返回char *的话可以这样写:char * a = (char*)string.c_str();
strtok()函数很好用,分割字符串 

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多