1、容器:序列容器(时间决定)、关联式容器(容器中的数据有一定规则)

2、迭代器:通过迭代器寻找、遍历容器中的数据

vetor的使用:数据遍历与输出

#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<vector> //向量 动态数组
#include<algorithm> //算法头文件
#include<string>
using namespace std; void myPrint(int val){
cout << val << " ";
} //1. STL中的容器算法迭代器
void test01(){ //容器
vector<int> v;
v.push_back(10);
v.push_back(20);
v.push_back(30);
v.push_back(40);
v.push_back(50); //获得开始迭代器
vector<int>::iterator begin = v.begin();
//获得结束位置迭代器
vector<int>::iterator end = v.end(); //遍历算法
for_each(begin, end, myPrint);
cout << endl;
} //2. 容器可以存放对象
class Person{
friend ostream& operator<<(ostream& out, Person &person);
public:
Person(string name,int age){
this->mName = name;
this->mAge = age;
}
public:
string mName;
int mAge;
}; ostream& operator<<(ostream& out, Person &person){
out << "Name:" << person.mName << " Age:" << person.mAge << endl;
return out;
}
void test02(){ vector<Person> v;
//在向容器中插入元素的时候,一定要保证元素能够被拷贝。
v.push_back(Person("aaa", 10));
v.push_back(Person("bbb", 20));
v.push_back(Person("ccc", 30));
v.push_back(Person("ddd", 40));
v.push_back(Person("eee", 50)); vector<Person>::iterator begin = v.begin();
vector<Person>::iterator end = v.end(); while (begin != end){
cout << (*begin);
++begin;
}
} //3. 存放对象指针
void test03(){ vector<Person *> v; //创建数据
Person *p1 = new Person("aaa", 10);
Person *p2 = new Person("bbb", 20);
Person *p3 = new Person("ccc", 30);
Person *p4 = new Person("ddd", 40);
Person *p5 = new Person("eee", 50); v.push_back(p1);
v.push_back(p2);
v.push_back(p3);
v.push_back(p4);
v.push_back(p5); vector<Person *>::iterator begin = v.begin();
vector<Person *>::iterator end = v.end(); while (begin != end){
cout << (*begin)->mName << " " << (*begin)->mAge << endl;
++begin;
} delete p5;
delete p4;
delete p3;
delete p2;
delete p1; } //4. 容器可以嵌套容器
void test04(){ vector<vector<int>> vs; vector<int> v1;
vector<int> v2;
vector<int> v3;
vector<int> v4;
vector<int> v5; for (int i = 0; i < 5;i ++){
v1.push_back(i + 10);
v2.push_back(i + 20);
v3.push_back(i + 30);
v4.push_back(i + 40);
v5.push_back(i + 50);
} vs.push_back(v1);
vs.push_back(v2);
vs.push_back(v3);
vs.push_back(v4);
vs.push_back(v5); vector<vector<int>>::iterator begin = vs.begin();
vector<vector<int>>::iterator end = vs.end(); while (begin != end){ vector<int>::iterator sbegin = (*begin).begin();
vector<int>::iterator send = (*begin).end(); while (sbegin != send){
cout << *sbegin << " ";
++sbegin;
}
cout << endl; ++begin;
} cout << "-------------------" << endl; for (vector<vector<int>>::iterator it = vs.begin(); it != vs.end(); ++it){
for (vector<int>::iterator sit = it->begin(); sit != it->end(); ++sit){
cout << *sit << " ";
}
cout << endl;
} } int main(){ //test01();
//test02();
//test03();
test04(); system("pause");
return EXIT_SUCCESS;
}

Vector常用API

#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<vector>
using namespace std; void printVector(const vector<int> &vec){
for (vector<int>::const_iterator it = vec.begin(); it != vec.end(); ++it){
cout << *it << " ";
}
cout << endl;
} void printReverseVector(vector<int> &vec){
for (vector<int>::reverse_iterator it = vec.rbegin(); it != vec.rend(); ++it){
cout << *it << " ";
}
cout << endl;
} //1. vector构造
/*
vector<T> v; //采用模板实现类实现,默认构造函数
vector(v.begin(), v.end());//将v[begin(), end())区间中的元素拷贝给本身。
vector(n, elem);//构造函数将n个elem拷贝给本身。
vector(const vector &vec);//拷贝构造函数。 //例子 使用第二个构造函数 我们可以...
int arr[] = {2,3,4,1,9};
vector<int> v1(arr, arr + sizeof(arr) / sizeof(int));
*/
void test01(){ int arr[] = { 2, 3, 4, 1, 9 };
vector<int> v(arr,arr+ sizeof(arr)/sizeof(int)); printVector(v);
printReverseVector(v); vector<int> v2(10, 6);
printVector(v2);
} //2. vector常用赋值操作
/*
assign(beg, end);//将[beg, end)区间中的数据拷贝赋值给本身。
assign(n, elem);//将n个elem拷贝赋值给本身。
vector& operator=(const vector &vec);//重载等号操作符
swap(vec);// 将vec与本身的元素互换。
*/
void test02(){
vector<int> v;
v.assign(10, 6); vector<int> v2;
v2.push_back(1);
v2.push_back(2);
v2.push_back(3); printVector(v);
printVector(v2); cout << "-----------------" << endl;
v.swap(v2);
printVector(v);
printVector(v2); //v.assign(v2.begin(),v2.end());
//printVector(v);
} //3. 大小操作
/*
size();//返回容器中元素的个数
empty();//判断容器是否为空
resize(int num);//重新指定容器的长度为num,若容器变长,则以默认值填充新位置。如果容器变短,则末尾超出容器长度的元素被删除。
resize(int num, elem);//重新指定容器的长度为num,若容器变长,则以elem值填充新位置。如果容器变短,则末尾超出容器长>度的元素被删除。
capacity();//容器的容量
reserve(int len);//容器预留len个元素长度,预留位置不初始化,元素不可访问。
*/ void test03(){ //1. resize开辟空间,并且初始化
//2. reserve只开辟空间,没有初始化
vector<int> v2;
v2.push_back(1);
v2.push_back(2);
v2.push_back(3); cout << "size:" << v2.size() << endl;
v2.resize(5); //改变容器中元素的个数,多余的扔掉
cout << "size:" << v2.size() << endl;
printVector(v2); v2.reserve(20); //预留空间
v2.push_back(10);
printVector(v2);
cout << "size:" << v2.size() << endl;
} void test04(){ vector<int> v;
v.resize(5);
v.push_back(10);
cout << "capacity:" << v.capacity() << endl;
cout << "size:" << v.size() << endl; cout << "----------" << endl;
vector<int> v2;
v2.reserve(5);
v2.push_back(10);
cout << "capacity:" << v2.capacity() << endl;
cout << "size:" << v2.size() << endl; //cout << v2[2] << endl;
} void test05(){ vector<int> v; v.reserve(100000); int *p = NULL;
int count = 0;
for (int i = 0; i < 100000;i ++){
v.push_back(i);
if (p != &v[0]){
p = &v[0];
count++;
}
}
cout << count << endl;
} //swap用法
void test06(){ vector<int> v;
for (int i = 0; i < 100000; i++){
v.push_back(i);
} cout << "容量:" << v.capacity() << endl;
cout << "大小:" << v.size() << endl; cout << "---------------" << endl;
v.resize(10);
cout << "容量:" << v.capacity() << endl;
cout << "大小:" << v.size() << endl; cout << "---------------" << endl;
vector<int>(v).swap(v);
cout << "容量:" << v.capacity() << endl;
cout << "大小:" << v.size() << endl;
} //7. vector数据存取操作
/*
at(int idx); //返回索引idx所指的数据,如果idx越界,抛出out_of_range异常。
operator[];//返回索引idx所指的数据,越界时,运行直接报错
front();//返回容器中第一个数据元素
back();//返回容器中最后一个数据元素
*/
void test07(){ vector<int> v;
v.push_back(1);
v.push_back(2);
v.push_back(3); cout << v.front() << endl;
cout << v.back() << endl; v.front() = 100;
v.back() = 200; for (int i = 0; i < v.size(); i ++){
cout << v[i] << " ";
}
cout << endl;
} //8. vector插入删除
/*
insert(const_iterator pos, int count,ele);//迭代器指向位置pos插入count个元素ele.
push_back(ele); //尾部插入元素ele
pop_back();//删除最后一个元素
erase(const_iterator start, const_iterator end);//删除迭代器从start到end之间的元素
erase(const_iterator pos);//删除迭代器指向的元素
clear();//删除容器中所有元素
*/
void test08(){ vector<int> v;
v.push_back(10);
v.push_back(20);
v.push_back(30);
v.push_back(40); v.insert(v.begin()+2,100);
printVector(v); v.pop_back();
printVector(v);
v.erase(v.begin());
printVector(v);
v.erase(v.begin(),v.end());
cout << "size:" << v.size() << endl; } int main(){ //test01();
//test02();
//test03();
//test04();
//test05();
//test06();
//test07();
test08(); system("pause");
return EXIT_SUCCESS;
}

STL vector常用API的更多相关文章

  1. C++ vector 常用API

    vector: 向量容器,动态数组,类模板 定义和初始化: vector<T> v1; //v1是空vector,元素类型是T类型,执行默认初始化,int为0,string为空串 vect ...

  2. C++STL -- vector 使用

    vector是一种顺序容器. vector常用API: 现在一个个分析: 1. assign 这是一种赋值方法,但是会覆盖原来容器内的值. void assign( size_type num, co ...

  3. STL之vector常用函数笔记

    STL之vector常用函数笔记 学会一些常用的vector就足够去刷acm的题了 ps:for(auto x:b) cout<<x<<" ";是基于范围的 ...

  4. 2.3 C++STL vector容器详解

    文章目录 2.3.1 引入 2.3.2 代码实例 2.3.3 运行结果 总结 2.3.1 引入 vector 容器 动态数组 可变数组 vector容器 单口容器(尾部操作效率高) vector动态增 ...

  5. C++ STL vector容器学习

    STL(Standard Template Library)标准模板库是C++最重要的组成部分,它提供了一组表示容器.迭代器.函数对象和算法的模板.其中容器是存储类型相同的数据的结构(如vector, ...

  6. java基础3.0:Java常用API

    本篇介绍Java基础中常用API使用,当然只是简单介绍,围绕重要知识点引入,巩固开发知识,深入了解每个API的使用,查看JavaAPI文档是必不可少的. 一.java.lang包下的API Java常 ...

  7. STL vector用法介绍

    STL vector用法介绍 介绍 这篇文章的目的是为了介绍std::vector,如何恰当地使用它们的成员函数等操作.本文中还讨论了条件函数和函数指针在迭代算法中使用,如在remove_if()和f ...

  8. STL vector 用法介绍

    介绍 这篇文章的目的是为了介绍std::vector,如何恰当地使用它们的成员函数等操作.本文中还讨论了条件函数和函数指针在迭代算法中使用,如在remove_if()和for_each()中的使用.通 ...

  9. C++STL vector详解(杂谈)

    介绍 这篇文章的目的是为了介绍std::vector,如何恰当地使用它们的成员函数等操作.本文中还讨论了条件函数和函数指针在迭代算法中使用,如在remove_if()和for_each()中的使用.通 ...

  10. STL vector简单用法

    初涉c++,此为<算法笔记>中的内容,有待个人理解完善. vector vector翻译为向量,叫做"变长数组"更容易理解. 头文件:#include<vecto ...

随机推荐

  1. 对循环神经网络参数的理解|LSTM RNN Input_size Batch Sequence

    在很多博客和知乎中我看到了许多对于pytorch框架中RNN接口的一些解析,但都较为浅显甚至出现一些不准确的理解,在这里我想阐述下我对于pytorch中RNN接口的参数的理解. 我们经常看到的RNN网 ...

  2. POJ1639 Picnic Planning (限制入度最小生成树)

    节点1是有度数限制的,把节点1去掉,就会形成若干个连通块,在每个连通块内部求最小生成树(prim算法实现),并求出每个连通块与1相连的最短的边,这样形成了初始状态的生成树. 假设(1,x)这条边没在生 ...

  3. linux 安装/卸载go环境

    linux 安装/卸载go环境(基于centos8) 安装 下载go的安装包 Golang官网下载地址:https://golang.org/dl/ 将安装包解压放到到usr/local中,并解压 c ...

  4. python基础作业1

    目录 附加练习题(提示:一步步拆解) 1.想办法打印出jason 2.想办法打印出大宝贝 3.想办法打印出run 4.获取用户输入并打印成下列格式 5 根据用户输入内容打印其权限 6 编写用户登录程序 ...

  5. 驱动开发:内核枚举Minifilter微过滤驱动

    Minifilter 是一种文件过滤驱动,该驱动简称为微过滤驱动,相对于传统的sfilter文件过滤驱动来说,微过滤驱动编写时更简单,其不需要考虑底层RIP如何派发且无需要考虑兼容性问题,微过滤驱动使 ...

  6. 通过刷题HTML遇到的问题

    通过刷题HTML遇到的问题 1.有关选择器的权重问题 1.通配符选择器和继承:权重为0, 2.标签选择器:权重为0001 3.类选择器:权重为0010 4.id选择器:权重为0100 5.行内样式:权 ...

  7. PXE批量装windows(半自动版本)

    一.  环境说明: 客户端:CPU:双核 内存:4GB 内存 80GB   ip地址:DHCP 服务端1:CPU:双核 内存:1GB 内存 20GB   ip地址:192.168.40.254     ...

  8. [zoj] 4178. Killing the Brute-force

    题目 Chenjb is the task author of the 71-st Zhejiang Provincial Collegiate Programming Contest. He cre ...

  9. C#pictureBox滚轮缩放与拖拽

    [转载]C#pictureBox滚轮缩放与拖拽 [转载]C#中图像平移.缩放的实现技巧 [转载]c# 通过鼠标拖动.放大图片,GDI绘图通过鼠标拖动.放大

  10. php统一的gocheck方法

    这半个月断断续续在学习用PHP的ThinkPHP框架开发后端API.现在总结记录一下开发一个接口需要做好哪些事,以此提高开发效率,并且也有不错的扩展性. 一.流程概要 基本是这么一个流程,略过环境搭建 ...