#include<iostream>
#include<vector>
using namespace std;
int main(int argc, char const *argv[])
{
/*//定义向量实例,并要求声明元素类型
vector<int> ivec;
vector<sales_item>sales_vec;
vector<vector<string>>file;//文件中的变量是字符串元素向量
//初始化
vector<int> ivec2(ivec);//拷贝ivec的元素
vector<string> articles = {"a","an","the"};//列表初始化,用花括号
vector<string> svec(10,"hi");//重复初始化
//可以不用初始化,因为vector内置了默认构造函数
vector<int> ivec(10);//指定向量大小,元素都为0
//向vector对象中添加元素
vector<int> v2;//声明空向量
for(int i = 0; i != 100; ++i){
v2.push_back(i);//压栈
}
string word;
vector<string> text;
while (cin >> word)
{
text.push_back(word);//把word添加到text后面
}*/
//下标的计算
vector<unsigned> scores(11,0);
unsigned grade;
while (cin >> grade)
{
if(grade <= 100){
++scores[grade/10];
}
}
//vector对象在初始化前不能直接通过下标添加元素
//decltype的使用
const int ci = 0, &cj = ci;
decltype(ci) x = 0;
decltype(cj) y = x;
int i = 42;
decltype(cj) z;//错误,z是一个引用,必须初始化
//decltype用来将一个变量的类型转嫁到另一个变量上
decltype((i)) d;//错误,d是int&,必须初始化
//使用迭代器
auto b = scores.begin(), e = scores.end();
//end成员返回容器的尾元素下一个位置的迭代器
string s("some string");
if(s.begin() != s.end()){
auto iter = s.begin();
*iter = toupper(*iter);
}
for(auto it = s.begin();it != s.end() && !isspace(*it);++it){
*it = toupper(*it);
}
//泛型编程:c++判断一般用 !=,== 和 迭代器 组合,而不是用>,<
//迭代器类型
vector<int>::iterator it;
string::iterator it2;
vector<int>::const_iterator it3;
string::const_iterator it4;//只能读,不能写
//begin和end运算符
vector<int> v;
const vector<int> cv;
auto it1 = v.begin();
auto it2 = cv.begin();//const_iterator
//迭代器循环
string text;
for(auto it = text.begin();it != text.end() && !it->empty();++it){
*it = toupper(*it);
cout << *it << endl;
}
return 0;
//迭代器循环2
vector<int> vec(10,1);
for(auto it = vec.begin();it != vec.end() && !it->empty();++it){
*it = 2*(*it);
}
//迭代器二分查找,要求容器存储元素是有序的
int sought = 0;
auto mid = v.begin() + v.size()/2;//指针加整型的应用
while (mid != end && *mid != sought)
{
if(sought < *mid){
it2 = mid;
}
else
{
it1 = mid + 1;
}
mid = it1 + (it2 - it1)/2;
}
}