c++auto的使用和解析(C++类相关)

数组,vector新老版本写法:

static void newVersionFor() {
	MyVector vv;
	for(auto v : vv) {

	}
  int ids[] = {1, 2, 3, 4, 5};
  std::cout << "new version ";
  for (auto v : ids) {
    std::cout << v << " ";
  }
  std::cout << std::endl;  // "\n";

  std::cout << "old version ";
  // old version
  for (int i = 0; i < sizeof(ids) / sizeof(int) / 2; ++i) {
    std::cout << ids[i] << " ";
  }
  std::cout << std::endl;  // "\n";

  std::vector<int> group;
  for (int i = 0; i < 4; ++i) group.push_back(i);
  // auto version
	for(std::vector<int>::const_iterator iter = group.begin(), iterEnd = group.end();
			iter != iterEnd; ++iter) {
		std::cout << *iter << " ";
	}
	std::cout << std::endl;

	for(size_t i = 0, size = group.size(); i < size; ++i) {
		std::cout << group[i] << " ";
	}
	std::cout << std::endl;

	std::cout << "vector verion : ";
  for (auto v : group) {
		v = v * v;
  }
	std::cout << std::endl;


  for (auto& v : group) {
		v = v * v;
  }

  for (const auto& v : group) {
  }
}

当需要修改range中元素,用for(auto& x:range)

当vector返回临时对象,使用auto&会编译错误,临时对象不能绑在non-const l-value reference (左值引用)需使用auto&&,初始化右值时也可捕获

  1. 想要拷贝元素:for(auto x:range)
  2. 想要修改元素 : for(auto &&x:range)
  3. 想要只读元素:for(const auto& x:range)

新版本类中定义了begin和end函数就能用for(auto…)

class MyVector {
	public:
		using GroupType = std::vector<int>;
		//typedef std::vector<int> GroupType;
		//GroupType::iterator begin() { return m_group.begin();}
		//GroupType::iterator end() { return m_group.end();}
	public:
		GroupType m_group;
};

MyVector::GroupType::iterator begin(MyVector& v) {
	return v.m_group.begin();
}

MyVector::GroupType::iterator end(MyVector& v) {
	return v.m_group.end();
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值