C++中的数组array和vector,lambda表达式,C字符串加操作,C++中新类型数组(数组缓存),多元数组,new缓冲
使用C++风格的数组。不须要管理内存。
array要注意不要溢出,由于它是栈上开辟内存.
array适用于不论什么类型
#include<iostream>
#include<array>
#include<vector>
//C++的标准库
#include<string>
//C++字符串
#include
<stdlib.h>
using
std::array;
//静态数组,栈上
using
std::vector;
//动态数组,堆上
using
std::string;
//使用C++风格数组不须要管理内存。
//array注意不要栈溢出
//array适用于不论什么类型
void
main()
{
array<int,
5> myint1 = { 1, 2, 3, 4, 5 };
array<int,
5> myint2 = { 11, 12, 13, 14, 15 };
array<int,
5> myint3 = { 21, 22, 23, 24, 25 };
//
array<array<int,5>, 3> myint = {myint1,myint2,myint3};
array<array<int,
5>, 3> myint = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
15 };
for (int
i = 0;
i <
myint.size();
i++)//数组大小
{
for (int
j = 0;
j <
myint1.size();
j++)
{
std::cout
<< "
" <<
myint[i][j];
}
std::cout
<< "\n";
}
std::cin.get();
}
vector:动态字符串数组
#include<iostream>
#include<array>
#include<vector>//C++的标准库
#include<string>//C++字符串
#include
<stdlib.h>
using
std::array;//静态数组,栈上,
using
std::vector;//动态数组,堆上,
using
std::string;
//使用C++风格数组不须要管理内存。
//array注意不要栈溢出
//array适用于不论什么类型
void
main()
{
vector <string>
string1;//动态字符串数组
//能够重复利用
string1.push_back("notepad");
string1.push_back("calc");
string1.push_back("mspaint");
string1.pop_back();//删除一个
//string1.clear();//清空
for (int
i = 0;
i <
string1.size();
i++)//遍历动态数组
{
system(string1[i].c_str());
}
system("pause");
}
5.通过iteratorkeyword进行过迭代
#include<iostream>
#include<array>
#include<vector>
//C++的标准库
#include<string>
//C++字符串
#include
<stdlib.h>
using
std::array;
//静态数组,栈上
using
std::vector;
//动态数组。堆上
using
std::string;
void
main()
{
vector <string>
string1;//动态字符串数组
string1.push_back("notepad");
string1.push_back("calc");
string1.push_back("mspaint");
vector<string>::iterator
ibegin,
iend;//迭代器
ibegin =
string1.begin();
//数据起始点
iend =
string1.end();
//结束
for (;ibegin
!= iend;ibegin++)
{
string
tempstr = *ibegin;
//获取指针指向的数据
system(tempstr.c_str());
//运行指令
}
system("pauese");
}
6.正逆向迭代数组
#include<iostream>
#include<array>
#include<vector>
//C++的标准库
#include<string>
//C++字符串
#include
<stdlib.h>
using
std::array;
//静态数组。栈上
using
std::vector;
//动态数组,堆上
using
std::string;
void
main()
{
array<int,
5> myint = { 1, 2, 3, 4, 5 };
array<int,
5>::iterator
ibegin,
iend;//正向迭代器
ibegin =
myint.begin();
iend =
myint.end();
while (ibegin
!= iend)
{
std::cout
<< *ibegin <<
std::endl;
ibegin++;
}
std::cout
<< "----------" <<
std::endl;
array<int,
5>::reverse_iterator
rbegin,
rend;
rbegin =
myint.rbegin();
rend =
myint.rend();
while (rbegin
!= rend)
{
std::cout
<< *rbegin <<
std::endl;
rbegin++;
}
std::cin.get();
}
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdG90b3R1enVvcXVhbg==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">
7.反向迭代器
#include<iostream>
#include<array>
#include<vector>
//C++的标准库
#include<string>
//C++字符串
#include
<stdlib.h>
using
std::array;
//静态数组。栈上
using
std::vector;
//动态数组,堆上
using
std::string;
void
main()
{
vector<string>
string1;
//动态字符串数组
string1.push_back("notepad");
string1.push_back("calc");
string1.push_back("mspaint");
//反向迭代器
vector<string>::reverse_iterator
rbegin =
string1.rbegin();
vector<string>::reverse_iterator
rend =
string1.rend();
//rend最后不指向数据,指向数据的结尾的下一个节点
//当使用以下的方法时,仅仅打印了记事本,计算器
rend--;
A:if
(rbegin !=
rend)
{
system((*rend).c_str());
//运行指令
//rbegin++;
rend--;
goto
A;
}
}
8.lambda表达式,不只适用与array,也适用于vector
#include<iostream>
#include
<vector>
#include
<algorithm>
//算法 lambda表达式。不只适用于array,也适用于vector
void
main()
{
std::vector<int>
myvector;
myvector.push_back(11);
myvector.push_back(22);
myvector.push_back(33);
myvector.push_back(3);
myvector.push_back(4);
myvector.push_back(5);
int
res = 0;
//结果
//&res直接操作一个变量。res等价于返回值,x代表參数,
//每次充当迭代器指向的元素,大括号就是代码
std::for_each(myvector.begin(),
myvector.end(),
[&res](int
x){res
+= x; });
std::cout
<< res;
std::cin.get();
}
执行结果是:
9.vector的增删改查
#include<iostream>
#include
<vector>
#include
<algorithm>
//算法 lambda表达式。不只适用于array,也适用于vector
void
main()
{
//分配5个空间,默认初始化为0
std::vector<int>
myvector(5);
myvector.push_back(1);
myvector.push_back(11);
myvector.push_back(111);
myvector.push_back(1111);
myvector.push_back(2);
//弹出一个元素,删除最后一个
myvector.pop_back();
//插入
myvector.insert(myvector.begin()
+ 1,999);
//依据迭代器的位置
myvector.erase(myvector.begin()
+ 5);
//myvector.clear(); //删除全部元素
for (int
i = 0;
i <
myvector.size();i++)
{
if (1)
{
//查询,改动
}
std::cout
<< myvector.at(i)
<< std::endl;
}
system("pause");
}
10.vector中的元素也是vector
#include<iostream>
#include
<vector>
#include
<algorithm>
//算法 lambda表达式,不只适用于array,也适用于vector
void
main()
{
//能够实现动态无规则数组管理
std::vector<int>
myvector1;
myvector1.push_back(12);
myvector1.push_back(13);
myvector1.push_back(14);
std::vector<int>
myvector2;
myvector2.push_back(22);
std::vector<int>
myvector3;
myvector3.push_back(32);
myvector3.push_back(37);
std::vector<std::vector<int>>
allvecor;
allvecor.push_back(myvector1);
allvecor.push_back(myvector2);
allvecor.push_back(myvector3);
for (int
i = 0;
i <
allvecor.size();i++)
{
for (int
j = 0;
j <
allvecor[i].size();j++)
{
std::cout
<< "
" <<
allvecor[i][j];
}
std::cout
<< "\n";
}
std::cin.get();
}
11.C++中的数组能够直接赋值
#include
<iostream>
#include
<array>
#include
<string>
#include
<stdlib.h>
void
main()
{
double
db[4] = { 1.1, 2.2, 3.3, 4.4 };
//std::array数据类型,double元素类型,4个数
std::array<double,
4> dbnew1 = { 10.1, 10.2, 10.3, 10.4 };
//能够实现数组之间总体操作
std::array<double,
4> dbnew2 =
dbnew1;
for (int
i = 0;
i < 4;
i++)
{
std::cout
<< db[i]
<< "
" <<
dbnew1[i]
<< "
" <<
dbnew2[i]
<< std::endl;
}
std::cin.get();
}
执行结果:
12.array的字符串
#include
<iostream>
#include<array>
#include<string>
#include<stdlib.h>
void
main()
{
std::array<std::string,
5> string1 = {
"calc",
"notepad",
"tasklist",
"mspaint",
"write" };
for (int
i = 0;
i < 5;
i++)
{
std::cout
<< string1[i]
<< std::endl;
system(string1[i].c_str());
}
std::cin.get();
}
12.C++能够加操作
#include
<iostream>
#include<array>
#include<string>
#include<stdlib.h>
void
main()
{
std::string
str1 =
"task";
std::string
str2 =
"list";
std::string
str3 =
str1 +
str2;
system(str3.c_str());
std::cin.get();
}
13.new的高级,缓冲区
#include<iostream>
#include<new>
const
int
buf(512);//限定一个常量整数512
int
N(5);//数组的长度
char
buffer[buf]
= { 0 };//静态区
//p1,p3,p5作为指针变量在栈区,存储的地址指向堆区
//手动释放内存
//p2,p4,p6作为指针变量在栈区,存储的地址在静态区。缓冲区。
//自己主动释放内存,用于分配用完了就不会再用的数据
//避免内存泄漏,自己主动释放内存。牺牲了内存訪问独立性。
using
namespace
std;
void
main()
{
double *p1,
*p2;
std::cout
<< "\n\n\n";
p1 =
new
double[N];//分配内存,N个元素的大小
p2 =
new (buffer)double[N];//指定区域分配内存
for (int
i = 0;
i <
N;
i++)
{
p1[i]
= p2[i]
= i + 10.8;//对于数组初始化
std::cout
<< "p1===
" << &p1[i]
<< "
" <<
p1[i];
std::cout
<< "
p2=== "<< &p2[i]
<< "
" <<
p2[i]
<< std::endl;
}
double *p3,
*p4;
std::cout
<< "\n\n\n";
p3 =
new
double[N];//分配内存,N个元素的大小
p4 =
new (buffer)double[N];//指定区域分配内存
for (int
i = 0;
i <
N;
i++)
{
p3[i]
= p4[i]
= i + 10.8;//对于数组初始化
std::cout
<< "p3===
" << &p3[i]
<< "
" <<
p3[i];
std::cout
<< "
p4=== "<< &p4[i]
<< "
" <<
p4[i]
<< std::endl;
}
double *p5,
*p6;
std::cout
<< "\n\n\n";
p5 =
new
double[N];//分配内存。N个元素的大小
p6 =
new (buffer)double[N];//指定区域分配内存
for (int
i = 0;
i <
N;
i++)
{
p6[i]
= p5[i]
= i + 10.8;//对于数组初始化
std::cout
<< "p5===
" << &p5[i]
<< "
" <<
p5[i];
std::cout
<< "
p6=== "<< &p6[i]
<< "
" <<
p6[i]
<< std::endl;
}
std::cin.get();
}
14.多元数组
#include
<iostream>
#include
<map>
//void在參数内部意味着參数为空,不写也意味着为空
void
main(void)
{
int
int1 = 10;
double
double1 = 99.8;
char
ch =
'A';
char *str
= "hellochina";
std::tuple<int,
double,
char,
const
char *>
mytuple(int1,
double1,
ch,
str);
const
int
num = 3;
auto
data0 =
std::get<0>(mytuple);
auto
data1 =
std::get<1>(mytuple);
auto
data2 =
std::get<2>(mytuple);
auto
data3 =
std::get<num>(mytuple);//下标仅仅能是常量
std::cout
<< typeid(data3).name()
<< std::endl;
decltype(data0)
dataA;
//获取数据类型再次创建
//mytuple.swap(mytuple); array
vector都有交换的功能
std::cout
<< data0 <<
"
" <<
data1 <<
"
" <<
data2 <<
"
" <<
data3 <<
std::endl;
std::cin.get();
}
//tuple必须是一个静态数组
//配合vector,array
C++中的数组array和vector,lambda表达式,C字符串加操作,C++中新类型数组(数组缓存),多元数组,new缓冲的更多相关文章
- C#中委托、匿名函数、Lambda表达式的一些个人理解
0x01定义一个委托,相当于定义一个可以存储方法的特殊变量类型 下面我们看具体的代码,通过代码更好理解 delegate void IntMethodInvoker(int x); 这行代码就是声明一 ...
- C++ 数组array与vector的比较
转:http://blog.csdn.net/yukin_xue/article/details/7391897 1. array 定义的时候必须定义数组的元素个数;而vector 不需要: 且只能包 ...
- JAVA8之lambda表达式具体解释,及stream中的lambda使用
前言: 本人也是学习lambda不久,可能有些地方描写叙述有误,还请大家谅解及指正! lambda表达式具体解释 一.问题 1.什么是lambda表达式? 2.lambda表达式用来干什么的? 3.l ...
- 写的非常好的文章 C#中的委托,匿名方法和Lambda表达式
简介 在.NET中,委托,匿名方法和Lambda表达式很容易发生混淆.我想下面的代码能证实这点.下面哪一个First会被编译?哪一个会返回我们需要的结果?即Customer.ID=5.答案是6个Fir ...
- Jsp中使用EL表达式对字符串进行操作
用fn函数:<%@ taglib prefix="fn" uri="http://Java.sun.com/jsp/jstl/functions" %&g ...
- 使用ES6新数组方法(象C# Lambda表达式一样写查询语句)
let people = [ {id: 1, name: "a", age: 12}, {id: 2, name: "b", age: 13}, {id: 3, ...
- JAVA8之lambda表达式详解,及stream中的lambda使用
分享文章:https://blog.csdn.net/jinzhencs/article/details/50748202
- scala lambda 表达式 & spark RDD函数操作
形式:(参数)=> 表达式 [ 一种匿名函数 ] 例1:map(x => x._2) 解:x=输入参数,“=>” 右边是表达式(处理参数): x._2 : x变为(**,x,**. ...
- C#复习笔记(4)--C#3:革新写代码的方式(Lambda表达式和表达式树)
Lambda表达式和表达式树 先放一张委托转换的进化图 看一看到lambda简化了委托的使用. lambda可以隐式的转换成委托或者表达式树.转换成委托的话如下面的代码: Func<string ...
随机推荐
- pandas.DataFrame——pd数据框的简单认识、存csv文件
接着前天的豆瓣书单信息爬取,这一篇文章看一下利用pandas完成对数据的存储. 回想一下我们当时在最后得到了六个列表:img_urls, titles, ratings, authors, detai ...
- Canal的安装与使用
一.Canal介绍 Canal的原理就是它自己伪装成slave, 向mysql发送dump协议,MySQL master接收到dump请求之后推送binlog文件给slave, 也就是canal. 二 ...
- Lex与Yacc学习(一)之环境配置篇
Abstract 在开发程序的过程中经常会遇到文本解析的问题,例如:解析 C 语言源程序,编写 脚本引擎等等,解决这种文本解析的方法有很多,一种方法就是自己手动用 C 或者 C++直接编写解析程序,这 ...
- nw335 debian sid x86-64 -- 5 使用xp的驱动
nw335 debian sid x86-64 -- 5 使用xp的驱动
- MFC中的CListControl控件
一直想要这种效果,无奈刚开始用了cListbox控件,不知道怎么生成背景的边框,找了好久资料,突然发现好像控件用错了. 用CListControl控件实现图中效果,超级开心~ 实现过程: 添加一个Li ...
- Debian7安装msf
安装metasploit curl https://raw.githubusercontent.com/rapid7/metasploit-omnibus/master/config/templa ...
- 关于流媒体(m3u8)的播放与下载
前一段时间做了一个视频播放下载应用,抓取的是优酷的视频,虽然优酷有自己的开发平台http://open.youku.com/,但未真正的实现.所以只能靠抓取视频源,Youku的视频采取了加密+动态的获 ...
- HackerRank# Hexagonal Grid
原题地址 铺瓷砖的变种,做法也是类似 假设地板长下面这样,灰色的是无法填充的空洞,初始时可以把N块之外的地板填充成灰色的,便于边界处理 假设现在从后向前已经处理完了一部分,绿色的砖块代表已经遍历过了, ...
- BZOJ 3611 [Heoi2014]大工程 ——虚树
虚树第二题.... 同BZOJ2286 #include <map> #include <cmath> #include <queue> #include < ...
- [BZOJ4994] [Usaco2017 Feb]Why Did the Cow Cross the Road III(树状数组)
传送门 1.每个数的左右位置预处理出来,按照左端点排序,因为左端点是从小到大的,我们只需要知道每条线段包含了多少个前面线段的右端点即可,可以用树状数组 2.如果 ai < bj < bi, ...