`

指针(二)、常量指针、指针常量、迭代器常量、常量迭代器

 
阅读更多

参见这里  ==>  http://www.cnblogs.com/xfxsworld/archive/2008/01/30/1059303.html

 

常量指针与指针常量

常量指针,就是指向常量的指针,关键字 const 出现在 * 左边,表示指针所指向的地址的内容是不可修改的,但指针自身可变。
指针常量,指针自身是一个常量,关键字 const 出现在 * 右边,表示指针自身不可变,但其指向的地址的内容是可以被修改的。

 

如何记忆:写法和读法是一致的

                const常量  char*指针

                char*指针  const常量

例:
        常量指针: const char* ptr = “hello”
        指针常量: char* const ptr = str_arr

注意:另外常量指针有两种写法:const既可写在类型前,又可写在类型后。如上面的例子,常量指针:char const * ptr = “hello” 也是正确的。

 

注意:上面例子中指针常量如果定义成char* const ptr = "hello",则仍然不能改变指向的内容,因为内容在const区

#include<iostream>
using namespace std;

int main(){
	char* const ptr = "hello";
	//*(ptr)=99;	//非法写const区报错
	cout<<endl;
	
	char arr[4]={'a','b','c',0};
	char* const ptr2 = arr; 
	cout<<ptr2<<endl;
	
	*(ptr2+1)='z';
	cout<<ptr2<<endl;
}

 
*************************************************************************************************************************************

常量迭代器与迭代器常量

 

再举个例子,看看迭代器是怎么用const的:


1. 迭代器const_iterator所指向的element只读不能写

std::vector < int > ::const_iterator Iter  =  vec.begin();
* Iter  =   10 ; // 错误,Iter是常量指针
Iter ++ ; // 正确


2. const iterator则迭代器本身只读(指向的element可变),则可以这样写:

const  std::vector < int > ::iterator Iter  =  vec.begin();
* Iter  =   10 // 正确
Iter ++ ;      // 错误,指针本身不可变

3. const const_iterator则迭代器本身只读指向的element也只读。很无聊的语法题:(

const  std::vector < int > ::const_iterator Iter  =  vec.begin();
* Iter  =   10 // 错误,Iter是常量指针
Iter ++ ;      // 错误,指针本身不可变


版权声明 :本篇为原创文章,允许转载,但转载时请务必以超链接形式标明文章的原始出处和作者信息。请尊重本人的劳动成果,谢谢!
小祥的BLOG http://xfxsworld.cnblogs.com

 

 ------------------------------------------------------------------------------------------------------------------------------------

stl中常用iterator和const_iterator这样访问container中的element:

#include <iostream>
#include <vector>
using namespace std;

int main(){

	vector<int> q;
	int arr[]={3,4,5,6};
	q.push_back(arr[0]);
	q.push_back(arr[1]);
	q.push_back(arr[2]);
	q.push_back(arr[3]);
	
	vector<int>::iterator iter=q.begin();
	while(iter!=q.end()){
		cout<<*iter<<endl;
		iter++;
	}
	cout<<endl;
	
	
	vector<int>::const_iterator iter2=q.begin();
	while(iter2!=q.end()){
		cout<<*iter2<<endl;
		iter2++;
	}
	
	//常这样写: 
	vector<int>::const_iterator it;
	for(it=q.begin();it!=q.end();it++){
		cout<<*it<<" ";	
	}
	
	return 0;
}

 

分享到:
评论

相关推荐

    Stl的list容器迭代器的用法1

    5. `cbegin()`、`cend()`: 类似于`begin()`和`end()`,但返回常量迭代器,不允许修改元素。 6. `crbegin()`、`crend()`: 类似于`rbegin()`和`rend()`,但返回常量反向迭代器。 **遍历list容器的示例** 下面的代码...

    有效使用Iterator

    - `const_reverse_iterator`:反向常量迭代器,只读,相当于反向常量指针`const T*`。 2. **迭代器的关联性**: - 迭代器与特定的容器实例相关联,不能跨容器使用。 - 不同类型的迭代器(例如,`iterator`与`...

    C++迭代器介绍(iterator、const_iterator、reverse_interator、const_reverse_interator)

    C++的迭代器是STL(Standard Template Library)的核心组件之一,它允许程序员像操作普通指针一样遍历容器中的元素,但具有更多的安全性和灵活性。迭代器扮演着“智能指针”的角色,它可以指向容器内的元素,提供了...

    第6次课第4章STL1(vector-set-map-pair).pptx

    另一种方式是使用迭代器,迭代器类似于指针,可以指向容器中的元素。在vector中,有四种迭代器类型: 1. 正向迭代器:`container_name::iterator iterator_name;` 2. 常量正向迭代器:`container_name::const_...

    c++常量引用-基础学习

    4. **STL容器**:标准模板库(STL)中的容器,如`std::vector`和`std::map`,它们的迭代器通常提供常量和非常量版本,允许用户选择是否修改容器元素。 5. **安全编程**:通过使用常量引用,可以避免无意间修改数据...

    C_C++指针经验总结 (完全的经验之谈,让你不再害怕指针)

    - **容器的迭代器**:`std::vector`、`std::list`等容器的迭代器实际上类似于指针,可以用来遍历容器元素。 - **算法与指针**:许多C++标准库算法如`std::sort`、`std::find`接受指针作为参数,对数组或容器进行...

    基于迭代器的C语言基础数据结构 (包括JSON解析器).zip

    C语言中定义指针使用星号()符号,指向数组、字符串和结构体等数据结构时,还需要注意数组名和字符串常量的特殊性质。 6. 数组和字符串 数组是C语言中用于存储同类型数据的结构,可以通过索引访问和修改数组中的...

    range_access.rar_The First

    在C++11及以后的版本中,还有一个`cbegin()`函数,它是常量版本的`begin()`,返回的迭代器不允许修改元素。 2. **rbegin()** 函数:对于反向迭代器,`rbegin()` 返回指向容器最后一个元素的反向迭代器,但对于访问...

    无标题C++ssssss

    数组遍历有两种方法,一种是下标遍历法,另一种是元素迭代法,下标遍历法可以使用for循环来遍历数组,每次循环都可以访问数组的每个元素,元素迭代法可以使用迭代器来遍历数组。 十一、选择排序 选择排序是一种...

    C++ STL学习资料

    9. 常量正确性:STL强调常量正确性,即在不改变数据的情况下,应使用常量版本的函数和迭代器,以确保程序的安全性。 10. 性能考虑:了解每个容器和算法的内部工作原理以及其性能特征是使用STL的关键。例如,对于...

    C++数组与指针深入剖析

    1. **数组名与指针**:数组名实际上是指向数组第一个元素的常量指针。因此,可以通过数组名来访问数组的第一个元素,也可以通过指针操作来访问数组中的其他元素。 - 示例:定义一个数组`int arr[5] = {1, 2, 3, 4, ...

    C++STL学习笔记.pdf

    STL的主要组成部分包括容器(containers)、迭代器(iterators)、算法(algorithms)、仿函数(functors)和适配器(adapters)。 首先,容器用于存储数据,并提供了遍历、插入和删除等操作。STL容器主要分为序列...

    c++程序设计知识点总结(谭浩强).docx

    6. **常量迭代器(const_iterator)**:不允许修改所指向的元素,确保不会意外改变容器的状态。 7. **反向迭代器(reverse_iterator)**:反向遍历容器,从后往前访问元素。在`reverse_iterator`上使用`++`会移动到...

    222018321062006宋行健12

    在C++中,迭代器通常用于STL(标准模板库)容器,如list、vector等,提供一种类似指针的方式遍历容器元素。 2. 时间复杂度分析:时间复杂度是衡量算法执行效率的一种方式,描述了问题规模n的增长与运行时间的关系。...

    STL容器和算法函数表

    - `const_iterator`: 访问`vector`的常量迭代器。 - `reverse_iterator`: 反向迭代器,用于逆序遍历`vector`。 - `const_reverse_iterator`: 反向常量迭代器。 ##### 迭代器方法 - `begin()`: 返回指向`vector`首...

    C++程序设计语言基本编程技能测试题(加密).doc

    - 声明常量指针,指针所指向的数据不可修改。 - 声明指针常量,指针本身不可改变。 - 声明常量成员函数,表明该函数不会修改对象的状态。 4. 迭代器(Iterator)是STL(Standard Template Library)的核心概念,...

    向量 stl 数据结构

    向量的迭代器类型通常定义为指向元素类型的指针,分为非常量迭代器(iterator)和常量迭代器(const_iterator)。 2.4 向量的实现方法 向量的实现通常涉及一个动态分配的内存块,用于存储元素。类`vector`包含以下...

    STL 标准模板库简介

    迭代器是STL中连接容器和算法的桥梁,它们扮演着指针的角色,可以遍历容器中的元素,同时提供了对算法友好的接口。迭代器有五种类型:输入迭代器、输出迭代器、前向迭代器、双向迭代器和随机访问迭代器,每种类型...

    C++-中的multiset容器

    - 当返回的是一个常量迭代器(`const_iterator`)时,`multiset`不会被修改。 - 当返回的是一个非常量迭代器(`iterator`)时,`multiset`可以被修改。 - **返回值**:返回一个指向第一个元素的双向迭代器。 **示例**...

Global site tag (gtag.js) - Google Analytics