const与vector的搭配
有三种组合方式,分别为:
- vector<const int> vec;
- const vector<int> vec;
- const vector<const int> vec;
以第一种方式声明时:效果和 vectot<int> vec 一样。
以第二种方式声明时:vec的元素既不能修改,也不能增加,只能访问。
int main()
{
const vector<int> vec{ 1, 2, 3 };
int v = vec[0]; //可以访问
//vec.push_back(4); //不能改变元素数量
//vec[0] = 4; //不能修改元素值
}
这里有一个地方要注意,当以const声明一个vector时,若想定义一个指针指向该vector中的元素,则指针也必须声明为const
int main()
{
const vector<int> vec{ 1, 2, 3 };
//int* p = &vec[0]; //会报错
const int* p = &vec[0]; //正确做法
}
以第三种方式声明时:效果和第二种方式一样。
以上的探讨来自我从《EssentialC++》中看到的一个函数:
//函数的作用是返回vector或者数据的第一个元素,若是vector为空,则返回nullptr
template<typename elemType>
elemType* begin(const vector<elemType>& vec)
{
return vec.empty() ? nullptr : &vec[0];
}
该函数声明虽然在编译时并没有报错,可是却并不稳妥,因为&vec[0]是一个const的指针,可是返回类型并没有带上const关键字,正确做法应该在返回值前加上const。
ps:来自官方文档的资料好像是错的:资料来自:http://www.cplusplus.com/forum/general/115538/

const与vector的搭配的更多相关文章
- c++ 模板参数做容器参数迭代器报错 vector<T>::const_iterator,typename const报错
错误1: template<class T>void temp(std::vector<T>& container){ std::vector<T& ...
- C++学习五 const vector<int>类型的迭代器使用
一情景: 算法功能:对于传入的vector, 能够找到两个数字,使其相加之和为target,然后返回这两个数字的位置(也就是秩) 最开始是这样的一个问题: 对于一个传入的const vector< ...
- could not deduce template argument for 'const std::_Tree<_Traits> &' from 'const std::string'
VS2008, 写一个简单的demo的时候出现了这个: 1>------ Build started: Project: GetExportTable, Configuration: Relea ...
- C++中const关键字的使用总结
C++中使用const关键字来修饰常量,下面从两个方面总结:变量和成员函数. 变量:const可以修饰普通变量.指针(数组)和结构体. 1.const修饰普通变量是最简单的情形.这样的用法多为在程序中 ...
- C++中const 的各种用法
C++中const 关键字的用法 const修饰变量 const 主要用于把一个对象转换成一个常量,例如: ; size = ; // error: assignment of read-only v ...
- Effective C++ -----条款03:尽可能使用const
如果关键字const出现在星号左边,表示被指物是常量:如果出现在星号右边,表示指针自身是常量:如果出现在星号两边,表示被指物和指针两者都是常量. char greeting[] = " he ...
- Effective C++ 之 Item 3:尽可能使用 const
Effective C++ Chapter 1. 让自己习惯C++(Accustoming Yourself to C++) Item 3. 尽可能使用 const (Use const whenev ...
- cocos基础教程(5)数据结构介绍之cocos2d::Vector
cocos2d::Vector cocos2d::Vector<T>是一个封装好的能动态增长顺序访问的容器.cocos2d::Vector<T>中的元素是按序存取的,它的低层实 ...
- cocos2d::Vector
C++中的vector使用范例 一.概述 vector是C++标准模板库中的部分内容,它是一个多功能的,能够操作多种数据结构和算法的模板类和函数库.vector是一个容器,它能够存放各种类型的对象,简 ...
随机推荐
- kubespy 用bash实现的k8s动态调试工具
原文位于 https://github.com/huazhihao/kubespy/blob/master/implement-a-k8s-debug-plugin-in-bash.md 背景 Kub ...
- Keystone V3 API Examples
There are few things more useful than a set of examples when starting to work with a new API. Here a ...
- 快速搭建一个自己的个人博客(Github Pages~二次元主题)
前言 本次的一个布局技术都写的非常详细了,只要按着来就行,不过,先说明本次主题为二次元主题. 如果真的喜欢本主题的不妨可以试一试(==建议跟据目录来看==) 在很久很久以前.... 嘛,就在前不久我正 ...
- 图解kubernetes scheduler基于map/reduce模式实现优选阶段
优选阶段通过分map/reduce模式来实现多个node和多种算法的并行计算,并且通过基于二级索引来设计最终的存储结果,从而达到整个计算过程中的无锁设计,同时为了保证分配的随机性,针对同等优先级的采用 ...
- NetCore下的log4
https://www.cnblogs.com/zhangxiaoyong/p/9463791.html 这一篇也不错 .NET常用的日志组件有NLog.Log4net等,.NET CORE下微软也自 ...
- C# 二分法的解读
注:一定是有序的数组,才可以使用这种算法,如果数组没有排序则先进行排序后再调用此方法. 1.二分法是做什么的呢? 当然是查找数组中的数据了,开个玩笑,哈哈哈. 2.为啥要用这种方式呢? 二分顾名思义, ...
- 如何查看Ubuntu服务器上Django项目的MySQL服务有没有挂?
如果你在项目内输入:MySQL -uroot -p 接着输入密码之后返回ERROR:1045……如下图 那么这就说明MySQL服务挂了. 需要重新启动一下 重启时在项目目录下输入:sudo servi ...
- Java 添加、读取、删除Excel形状
本文介绍通过java程序在excel中操作形状(图形)的方法,包括: 1. 添加形状(如设置形状类型/位置/大小.形状颜色填充(单色/渐变色/纹理/图片填充).形状显示或隐藏.形状倾斜角度.添加文本到 ...
- 分享一下我在mysql5.6+mysql8数据库安装过程中的一些坑!
Mysql5.6安装 下载好安装包后,在bin目录下用cmd打开,输入mysqld install [服务名]新建个服务 在windows+r输入services.msc即可查看服务 怎样使用mysq ...
- JavaScript 注意
字符串常用方法: 除.length外 都要加括号 trimLeft trimRight L和R要大写. .charAt 类似索引,超出范围为空 ,注意 (At)大小写. 注意 1.st ...