C++新类型数组:
1.array静态数组大小在定义时固定,位于栈上。
#include<iostream>
#include<array>
#include<string>
void main1()
{
double db[4] = {1.1,2.2,3.3,4.4};
std::array<double,3> dbnew = { 10.1,10.2,10.3 };
for (auto a:dbnew)
{
std::cout <<a<< std::endl;
}
std::cin.get();
}
void main()
{
std::array<std::string, 4> string1 = { "calc","notepad","tasklist","ipconfig" };
std::string str1, str2;
std::string str3 = str1 + str2;
for (auto a:string1)
{
std::cout << a << std::endl;
system(a.c_str());
}
std::cin.get();
}
2. vector动态数组大小可变,位于堆上,可以通过接口函数进行删改。 用于管理不规则的树状结构,实现动态无规则,内存连续。
3. tuple静态数组,包含不同的类型,类型固定后必须赋值为相应的类型。
#include<iostream>
#include<tuple>
#include<string>
using namespace std;
void main()
{
tuple<string, int, double > mytuple("Guodong",18,99.9);
cout<<get<0>(mytuple)<<' '<< get<1>(mytuple) <<' '<< get<2>(mytuple);
cin.get();
}
#include<iostream>
#include<array>
#include<vector>
#include<string>
#include<stdlib.h>
using std::array;
using std::vector;
using std::string;
void main1()
{
array<int, 3> myint = { 1,2,3 };//静态数组 位于栈上
//array<int, 1024 * 256> myint1;//栈溢出 超过1M
vector<double> mydb;//动态数组 位于堆上
for (int i=0;i < 1024 * 1024;i++)
{
mydb.push_back(i);//
}
std::cin.get();
}
void main2() //cpp新数组,多维数组
{
array<int, 3> myint1 = { 1,2,3 };
array<int, 3> myint2 = { 4,5,6 };
array<int, 3> myint3 = { 7,8,9 };
array<array<int, 3>, 3> myint = {myint1,myint2,myint3};
for (int i = 0;i < 3;i++)
{
for (int j = 0;j < 3;j++)
{
std::cout << myint[i][j] <<' ';
}
std::cout << std::endl;
}
std::cin.get();
}
void main3() //字符串数组
{
vector<string> string1 ;
string1.push_back("notepad");
string1.push_back("calc");
string1.pop_back();//删除一个
/*for (int i = 0;i < string1.size(); i++)
{
system(string1[i].c_str());
}*/
for (auto i : string1)
{
system(i.c_str());
}
std::cin.get();
}
void main4() //迭代器
{
vector<string> string1;
string1.push_back("notepad");
string1.push_back("calc");
vector<string>::iterator ibegin, iend;//创建指针
ibegin = string1.begin(); //开始
iend = string1.end(); //结尾
for (;ibegin!= iend;ibegin++)
{
string temp = *ibegin;
system(temp.c_str());
}
std::cin.get();
}
void main5()//arry数组迭代器
{
array<int, 3> ary = { 1,2,3 };
array<int, 3>::iterator ibegin, iend;
ibegin = ary.begin();
iend = ary.end();
for (;ibegin != iend;ibegin++)
{
std::cout<<*ibegin<<' ';
}
array<int, 3>::reverse_iterator rbegin, rend; //反向迭代器
rbegin = ary.rbegin();
rend = ary.rend();
for (;rbegin != rend;rbegin++)
{
std::cout << *rbegin << ' ';
}
std::cin.get();
}
void main6() //string反向迭代器
{
vector<string> string1;
string1.push_back("notepad");
string1.push_back("calc");
vector<string>::reverse_iterator rbegin, rend;//创建指针
rbegin = string1.rbegin(); //开始
rend = string1.rend(); //结尾
for (;rbegin != rend;rbegin++)
{
string temp = *rbegin;
system(temp.c_str());
}
std::cin.get();
}
#include<iostream>
#include<vector>
#include<algorithm>
void main1()
{
std::vector<int> myint;
myint.push_back(100);
myint.push_back(200);
myint.push_back(300);
int sum=0;
//数据累加,res等价于函数返回值
std::for_each(myint.begin(), myint.end(), [&sum](int x) {sum += x;});
std::cout << sum;
std::cin.get();
}
void main2()// vector增删查改
{
std::vector<int> myvector(5);// 分配5个空间,默认为0
myvector.push_back(100);
myvector.push_back(200);
myvector.push_back(300);
//myvector.pop_back();
myvector.erase(myvector.begin() + 6);//根据迭代器的位置删除
for (int i = 0;i < myvector.size();i++)
{
std::cout << myvector.at(i) << std::endl;
}
std::cin.get();
}
void main3()//二维动态数组
{
std::vector<int> vector1;
vector1.push_back(11);
vector1.push_back(12);
std::vector<int> vector2;
vector2.push_back(21);
vector2.push_back(22);
std::vector<int> vector3;
vector3.push_back(31);
vector3.push_back(32);
vector3.push_back(33);
std::vector<std::vector<int>> allvector;
allvector.push_back(vector1);
allvector.push_back(vector2);
allvector.push_back(vector3);
for (int i = 0;i < allvector.size();i++)
{
for (int j = 0;j < allvector[i].size();j++)
{
std::cout << allvector[i][j]<<' ';
}
std::cout << std::endl;
}
std::cin.get();
}
#include<iostream>
#include<map>
void main(void)//参数为空 多元数组,tuple必须是一个静态数组
{
int int1 = 100;
double double1 = 9.8;
char ch = 'A';
char *str = "hellochina";
decltype(int1) int2;
const int num = 2;
std::tuple<int,double,char,const char*> mytuple(int1,double1,ch,str);
std::cout << std::get<0>(mytuple) << '\n';
std::cout << std::get<1>(mytuple) << '\n';
std::cout << std::get<2>(mytuple) << '\n';
std::cout << std::get<3>(mytuple) << '\n';
std::cout << std::get<num>(mytuple);//只能是常量
std::cout << typeid(std::get<0>(mytuple)).name() << '\n';
std::cin.get();
}