参见这里 ==> 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只读不能写
* Iter = 10 ; // 错误,Iter是常量指针
Iter ++ ; // 正确
2. const iterator则迭代器本身只读(指向的element可变),则可以这样写:
* Iter = 10 ; // 正确
Iter ++ ; // 错误,指针本身不可变
3. const const_iterator则迭代器本身只读,指向的element也只读。很无聊的语法题:(
* 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; }
相关推荐
5. `cbegin()`、`cend()`: 类似于`begin()`和`end()`,但返回常量迭代器,不允许修改元素。 6. `crbegin()`、`crend()`: 类似于`rbegin()`和`rend()`,但返回常量反向迭代器。 **遍历list容器的示例** 下面的代码...
- `const_reverse_iterator`:反向常量迭代器,只读,相当于反向常量指针`const T*`。 2. **迭代器的关联性**: - 迭代器与特定的容器实例相关联,不能跨容器使用。 - 不同类型的迭代器(例如,`iterator`与`...
C++的迭代器是STL(Standard Template Library)的核心组件之一,它允许程序员像操作普通指针一样遍历容器中的元素,但具有更多的安全性和灵活性。迭代器扮演着“智能指针”的角色,它可以指向容器内的元素,提供了...
另一种方式是使用迭代器,迭代器类似于指针,可以指向容器中的元素。在vector中,有四种迭代器类型: 1. 正向迭代器:`container_name::iterator iterator_name;` 2. 常量正向迭代器:`container_name::const_...
4. **STL容器**:标准模板库(STL)中的容器,如`std::vector`和`std::map`,它们的迭代器通常提供常量和非常量版本,允许用户选择是否修改容器元素。 5. **安全编程**:通过使用常量引用,可以避免无意间修改数据...
- **容器的迭代器**:`std::vector`、`std::list`等容器的迭代器实际上类似于指针,可以用来遍历容器元素。 - **算法与指针**:许多C++标准库算法如`std::sort`、`std::find`接受指针作为参数,对数组或容器进行...
C语言中定义指针使用星号()符号,指向数组、字符串和结构体等数据结构时,还需要注意数组名和字符串常量的特殊性质。 6. 数组和字符串 数组是C语言中用于存储同类型数据的结构,可以通过索引访问和修改数组中的...
在C++11及以后的版本中,还有一个`cbegin()`函数,它是常量版本的`begin()`,返回的迭代器不允许修改元素。 2. **rbegin()** 函数:对于反向迭代器,`rbegin()` 返回指向容器最后一个元素的反向迭代器,但对于访问...
数组遍历有两种方法,一种是下标遍历法,另一种是元素迭代法,下标遍历法可以使用for循环来遍历数组,每次循环都可以访问数组的每个元素,元素迭代法可以使用迭代器来遍历数组。 十一、选择排序 选择排序是一种...
9. 常量正确性:STL强调常量正确性,即在不改变数据的情况下,应使用常量版本的函数和迭代器,以确保程序的安全性。 10. 性能考虑:了解每个容器和算法的内部工作原理以及其性能特征是使用STL的关键。例如,对于...
1. **数组名与指针**:数组名实际上是指向数组第一个元素的常量指针。因此,可以通过数组名来访问数组的第一个元素,也可以通过指针操作来访问数组中的其他元素。 - 示例:定义一个数组`int arr[5] = {1, 2, 3, 4, ...
STL的主要组成部分包括容器(containers)、迭代器(iterators)、算法(algorithms)、仿函数(functors)和适配器(adapters)。 首先,容器用于存储数据,并提供了遍历、插入和删除等操作。STL容器主要分为序列...
6. **常量迭代器(const_iterator)**:不允许修改所指向的元素,确保不会意外改变容器的状态。 7. **反向迭代器(reverse_iterator)**:反向遍历容器,从后往前访问元素。在`reverse_iterator`上使用`++`会移动到...
在C++中,迭代器通常用于STL(标准模板库)容器,如list、vector等,提供一种类似指针的方式遍历容器元素。 2. 时间复杂度分析:时间复杂度是衡量算法执行效率的一种方式,描述了问题规模n的增长与运行时间的关系。...
- `const_iterator`: 访问`vector`的常量迭代器。 - `reverse_iterator`: 反向迭代器,用于逆序遍历`vector`。 - `const_reverse_iterator`: 反向常量迭代器。 ##### 迭代器方法 - `begin()`: 返回指向`vector`首...
- 声明常量指针,指针所指向的数据不可修改。 - 声明指针常量,指针本身不可改变。 - 声明常量成员函数,表明该函数不会修改对象的状态。 4. 迭代器(Iterator)是STL(Standard Template Library)的核心概念,...
向量的迭代器类型通常定义为指向元素类型的指针,分为非常量迭代器(iterator)和常量迭代器(const_iterator)。 2.4 向量的实现方法 向量的实现通常涉及一个动态分配的内存块,用于存储元素。类`vector`包含以下...
迭代器是STL中连接容器和算法的桥梁,它们扮演着指针的角色,可以遍历容器中的元素,同时提供了对算法友好的接口。迭代器有五种类型:输入迭代器、输出迭代器、前向迭代器、双向迭代器和随机访问迭代器,每种类型...
- 当返回的是一个常量迭代器(`const_iterator`)时,`multiset`不会被修改。 - 当返回的是一个非常量迭代器(`iterator`)时,`multiset`可以被修改。 - **返回值**:返回一个指向第一个元素的双向迭代器。 **示例**...