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();
}