1.复杂度与Big-O标记
;时间复杂度与个数无关
;时间复杂度与个数呈对数关系
;时间复杂度与个数呈线性关系
;时间复杂度与个数对数与线性成绩关系
;时间复杂度与个数呈平方关系
考虑复杂度时,输入量必须足够大才有意义。
2.一致性初始化(uniform initialization)和初值列 (initializer list)
一致性初始化:
int values[] {1,2,3,4};
char a {'*'};
char b {6};
char c {999};//不能通过编译,个人理解:结合python学习经验,{}在编译器中被解释成一个list,list的类型由char决定,那么就是 list<char> [] {9999};char 类型 0 - 127;专业术语:窄化,精度降低。类型隐式转换失败。0-127的int可以转换成功。
初值列 (initializer list):(explicit 关键字,拒绝使用list初始化,需要与形参one by one)
如果使用列表初始化值存在丢失信息的风险,则编译器将报错:
std::initializer_list <_type> 与 初始值{_type,_type,_type}(右值list)结合使用。
// STLexample.cpp : 定义控制台应用程序的入口点。
//
// STLexample.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <iostream>
#include <string>
#include <initializer_list>
#include <vector>
#include <stdarg.h>
using namespace std;
class initial
{
public:
vector<int> veca;
public:
initial(int _a, int _b);
initial(std::initializer_list<int> lista);
void print_self(string funcname, long line);
};
initial::initial(int _a, int _b)
{
veca.push_back(_a);
veca.push_back(_b);
print_self(__FUNCTION__,__LINE__);
}
initial::initial(initializer_list<int> lista)
{
veca = lista;
print_self(__FUNCTION__ ,__LINE__);
}
void initial::print_self(string funcname, long line)
{
cout << funcname <<line<< endl;
for each (int var in veca)
{
cout << var << "\r\n" << endl;
}
}
int _tmain(int argc, _TCHAR* argv[])
{
initial init1(77, 5);
initial init2{ 77, 5 ,8};
system("pause");
return 0;
}