朝花夕拾-工作一年后重拾c语言基础,与君共勉(三)-vector和auto

vector被我们翻译为向量,虽然总觉得挺别扭,只喜欢记它原始的名字-vector。

我一般把它当作队列使用。

它只能向尾部添加对象

vector<object> v;
v.push_back(aobj);//向v中添加一个object类型的aobj对象。


例如:定义求一个string类型的vector的长度

	vector<string> str{10,"s3"};
	for(auto c : str)//c++11
		cout<<c<<endl;
	cout<<"size:"<<str.size()<<endl;


c++11中支持自识别的类型auto,如上面代码中的auto c :str,就是取所有str中的元素。

我认为它的实现方式是定义一个指针指向 &str 。然后再在调用时取*。

为了证明这个想法尝试了如下代码,目的是把每组输入字符串的小写字母换成大写的。

	string word;
	vector<string> str;
	while(cin>>word)
	{		
		for(auto &c : word)
			c = toupper(c);
		str.push_back(word);
		for(auto substr : str)
			cout<<substr<<endl;
	}

运行结果为:


因为vector类型是string,substr即为char*。auto会自动寻址到每个char,即&str++。若将程序改成下面的样子

	string word;
	vector<string> str;
	while(cin>>word)
	{		
		for(auto &c : word)
			c = toupper(c);
		str.push_back(word);
		for(auto substr : str)
		 for(auto substr1 : substr)
			cout<<substr1<<endl;
	}


输入2dFe,得到的结果是每行输出一个字母

可见substr1类型为char。

若再加一层,更改代码为:

	string word;
	vector<string> str;
	while(cin>>word)
	{		
		for(auto &c : word)
			c = toupper(c);
		str.push_back(word);
		for(auto substr : str)
		 for(auto substr1 : substr)
		  for(auto substr2 : substr1)
			cout<<substr2<<endl;
	}


即会报错

19	24	C:\Users\ztana\Documents\NT\main.cpp	[Error] no matching function for call to 'begin(char&)'


即substr2为char&。

 

这样auto可以很方便的在循环中使用,不过类似变量定义就不要用了,比如你定义个迭代器,

vector<int> v;
auto b = v.begin();


倒是不报错,但估计没多久就忘了。

 

回到vector,vector还可以通过数组下标的方式访问,但一定要先初始化,否则会报错。初始化之后访问没有初始化的下标也可以访问,会返回一个没意义的值。

比如push_back了4次,然后访问v[4]。

很容易出错。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值