C++深入讲解namespace与string关键字的使用

目录
  • namespace
    • 1.为什么使用namespace
    • 2.namespace的定义
    • 3.namespace的使用
    • 4.使用using指示符
  • string
    • 1.string的定义及初始化
    • 2.访问string的内容
    • 3.常用函数

namespace

首先声明:在C++中支持三种域局部域,名字空间,类域。

1.为什么使用namespace

在C++中可能会出现这样的情况:我们正在编写一个名为myj()函数的代码,但是另一个可用的库,它也具有相同的myj()函数。现在编译器无法知道代码中使用的myj()函数是哪个版本。

所以namespace就是用来克服这个困难,并被用作额外的信息来区分类似的函数、类、变量等等,它们在不同的库中具有相同的名称。使用名称空间,你可以定义定义名称的上下文。

本质上,名称空间定义了一个范围。

2.namespace的定义

  • 命名空间将全局作用域分成不同的部分
  • 不同命名空间中的标识符可以同名而不会发生冲突
  • 命名空间可以发生嵌套
  • 全局作用域也叫默认命名空间

举例说明:

//1.普通的命名空间
namespace myj
{
	int g _max = 10;
	int g_min = 0;
	int my_add(int a,int b){ return a+b;}
}
//2.名字空间域可分层嵌套,同样有分层屏蔽作用
namespace Primer
{
	double pi = 3.1415926535898;
	double my_add(double a,double b) {return a + b;}
	namespace Matrix
	{
		char my_max(char a,char b) { return a>b? a:b;}
	}
}
//3.同一个工程中允许存在多个相同名称的命名空间
//编译器最后会合成同一个命名空间中。
namespace myj
{
	float pi = 3.14;
	int my_sub(int a,int b)
	{
		my_min = a - b;
		return my_min;
	}
}

3.namespace的使用

  • 加名字空间及作用域限定符
  • 使用using将名字空间中成员引入
  • 使用using namespace名字空间名称引入
#include <stdio.h>
#include <iostream>
namespace First
{
	int i = 0;
}
namespace Second
{
	int i = 1;

	namespace Internal //嵌套命名空间
	{
		struct P  //嵌套命名空间
		{
			int x;
			int y;
		};
	}
}
int main()
{
	using namespace First; //使用整个命名空间
	using Second::Internal::P;  //使用嵌套的命名空间

	printf("First::i = %d\n", i);
	printf("Second::i = %d\n", Second::i);  //使用命名空间中的变量
	p = { 2, 3 };
	printf("p.x = %d\n", p.x);
	printf("p.y = %d\n", p.y);
	system("pause");
	return 0;
}

4.使用using指示符

标准C++库中的所有组件都是在一个被称为std的名字空间中声明和定义的。在采用标准C++的平台上使用标准C++库中的组件,只要写一个using指示符:

using namespace std;

就可以直接使用标准C++库中的所有成员。

string

1.string的定义及初始化

定义string的方式跟基本数据类型相同,只需要在string后跟上变量名

string s;

初始化:

string str = "yyds";

2.访问string的内容

  • 通过下标访问,s[i]表示字符串s中下标位i的元素

如果要读入和输出整个字符串,则只能使用cin和cout

如果一定要用printf来输出string,可以用c_str()函数将string类型转换为字符数组进行输出。

printf("%s",str.c_str());
  • 通过迭代器访问

因为string不像其他STL容器那样需要参数,因此可以直接如下定义:

string::iterator it;

这样就得到了迭代器it,并且可以通过*it来访问string里的每一位

3.常用函数

1.operator+

连接两个字符串或者一个字符串和一个字符。

2.compare operator

两个string类型可以直接使用==、!=、<、<=、>、>=比较大小,比较规则是字典序。

3.length()/size()两者返回string的长度,即存放的字符数。

4.insert(pos,string)

在pos号位置插入字符串string

5.insert(it,it2,it3)

it为原字符串的欲插入位置,it2和it3为待插字符串的首位迭代器,用来表示串[it2,it3)将被插在it的位置上。

6.erase()

删除单个元素,str.erase(it)用于删除单个元素,it为需要删除的元素的迭代器。 删除一个区间内的所有元素。

7.clear()

用以清空string中的数据。

8.substr()

substr(pos,len)返回从pos号位开始、长度为len的字串。

9.string::npos

一个常数,其本身的值为-1,但由于是unsigned_int 类型,因此实际上也可以认为是unsigned_int类型的最大值4294967295。 string::npos用以作为find函数匹配时的返回值。

10.find()

str.find(str2),当str2是str的子串时,返回其在str中第一次出现的位置;如果str2不是str的子串,那么返回string::npos。 str.find(str2,pos),从str的pos号位开始匹配str2,返回值与上相同。

11.replace()

str.replace(pos,len,str2)把str从pos号位开始、长度为len的子串替换为str2 str.replace(it1,it2,str2)把str的迭代器[it1,it2)范围的字串替换为str2

12.assign()

str.assign(str.rbegin(),str.rend())可以实现字符串翻转。

到此这篇关于C++深入讲解namespace与string关键字的使用的文章就介绍到这了,更多相关C++ namespace与string内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • 示例详解C++语言中的命名空间 (namespace)

    目录 前言 1. 命名空间 2. using 指令 3. 不连续的命名空间 4. 嵌套的命名空间 5. 命名空间内变量.函数.全局变量的作用域 5.1 using namespace first_space; 5.2 using namespace first_space::second_space; 总结 前言 命名空间可作为附加信息来区分不同库中相同名称的函数.类.变量等.命名空间即定义了上下文,命名空间就是定义了一个范围. 一个文件夹 (目录) 中可以包含多个文件夹,每个文件夹中不能有相同

  • C++如何切割String对象的方法

    目录 核心函数 find函数 substr函数 数值转换 输入样例 输出样式 C++相较于Java,Python 并没有提供的字符串分割的函数split,因此需要自己进行编写.在实际的工作中这一功能会被经常使用,所以进行简单的记录一下. 核心函数 代码实现的函数是调用String库中的find函数和substr函数. find函数 size_type find(const basic_string &str,size_type pos=0) find函数完成最简单的搜索,它查找参数指定的字符串(

  • C++ 命名空间--namespace总结

    目录 定义 意义 名字空间的三种使用方法 匿名空间 名字空间嵌套 总结 定义 namespace 名字空间的名字{ 全局变量 类型定义 函数 } 意义 对于一个较大型的C++程序来说,需要由多个程序员相互协作编写,这样的情况下容易出现不同程序员在需要负责的程序部分使用相同名字的变量或函数,导致程序合并后出现问题.名字空间的作用,就是将不同程序员编译的程序放入相应的名字空间,每个名字空间相对独立,空间内的变量和函数名只局限于当前空间下,从而解决命名冲突的问题. 名字空间的三种使用方法 (1)作用域

  • 你真的懂C++中的namespace用法

    namespace中文意思是命名空间或者叫名字空间,传统的C++只有一个全局的namespace,但是由于现在的程序的规模越来越大,程序的分工越来越细,全局作用域变得越来越拥挤,每个人都可能使用相同的名字来实现不同的库,于是程序员在合并程序的时候就会可能出现名字的冲突.namespace引入了复杂性,解决了这个问题.namespace允许像类,对象,函数聚集在一个名字下.本质上讲namespace是对全局作用域的细分. 说白了namespace是怕变量冲突而出现的一种界限,不同的namespac

  • 深入浅出分析C++ string底层原理

    目录 一.深浅拷贝 浅拷贝: 深拷贝 二.string迭代器原理 三.string的传统写法 1.构造实现 2.其他接口 一.深浅拷贝 浅拷贝: 在实现string时要是不实先string拷贝构造,会自动生成一个拷贝构造函数,但是他只是一个浅拷贝.两个string对象指向同一个地址,在两个对象调用析构函数是,前一个对象调用的析构函数已经释放了这个地址的内从,而后一个会重复释放该块空间,导致出错. 会触发断点,然后报错. class string { public: /*string() :_st

  • C++ namespace案例详解

    在C++语言编写的程序中,变量和函数等的作用范围是有一定限制的.比如,在函数体中定义的一个临时变量就不可以在函数体外使用.为了解决变量和函数等的作用范围,在C++语言中引入了名空间的概念,并增加了关键字namespace和using 在一个名空间中可以定义一组变量和函数,这些变量和函数的作用范围一致,可以将这些变量和函数称为这个名空间的成员. 通过名空间,可以在同一个文件中使用相同的变量名或函数名,只要它们属于不同的名空间.另外,名空间可以使得代码操作具有相同名字但属于不同库的变量.而且,名空间

  • C++ namespace命名空间解析

    目录 命名空间 namespace 命名空间的定义 1. 函数定义在命名空间里 2.对全局变量使用命名空间 3.命名空间的嵌套 4.using命名空间 5.命名空间里的结构体 命名空间 namespace #include<iostream> int rand = 0; int main() { printf("%d", rand); return 0; } 上述代码一定会出现以下情况: 原因: 自己定义的rand变量为某一库函数里面已经声明过的函数,意思就是你自己定义的东

  • C/C++中命名空间(namespace)详解及其作用介绍

    目录 概述 命名空间 命名空间的作用 自定义命名空间 命名空间成员的方法 案例 概述 命名空间 (namespace) 可以帮助我们区分不同库中相同名称的函数, 类, 变量等. 使用了命名空间即定义了上下文. 命名空间就是定义了一个范围. 命名空间 为了解决 C++ 标准库中的标识符与程序中的全局标识符之间以及不同库中的所有标识符之间的命名冲突. 标准 C++ 库的所有标识符都定义在一个名为 std 的命名空间中. 在程序中用到 C++ 标准库时, 使用 std 作为限定. 我们在写 "Hell

  • C++深入讲解namespace与string关键字的使用

    目录 namespace 1.为什么使用namespace 2.namespace的定义 3.namespace的使用 4.使用using指示符 string 1.string的定义及初始化 2.访问string的内容 3.常用函数 namespace 首先声明:在C++中支持三种域局部域,名字空间,类域. 1.为什么使用namespace 在C++中可能会出现这样的情况:我们正在编写一个名为myj()函数的代码,但是另一个可用的库,它也具有相同的myj()函数.现在编译器无法知道代码中使用的m

  • C++深入讲解new与deleted关键字的使用

    目录 可执行程序的虚拟地址空间 1.new的运算符用法(关键字) 2.new的函数用法 3.定位new 4.new创建对象 5.delete 6.对于内置类型new/delete/malloc/free可以混用 7.使用注意事项 可执行程序的虚拟地址空间 内核:存放操作系统 栈区:函数的形参,非静态的局部变量,函数现场 保护数据等等,栈是向下增长的. 共享库的内存映射区域:用于装载一个共享的动态内存库.用户可使用系统接口创建共享内存,做进程间通信. 堆区:用于程序运行时动态内存分配,堆是可以上增

  • C++示例讲解friend static const关键字的用法

    目录 一.友元函数 1.1重载operator<< 1.2友元函数 1.3友元类 二.关键字const 2.1const修饰类的成员函数 三.关键字static 3.1static类成员 3.2面试题 总结 一.友元函数 1.1重载operator<< 问题:现在我们尝试去重载operator<<,然后发现我们没办法将operator<<重载成成员函数.因为cout的输出流对象和隐含的this指针在抢占第一个参数的位置.this指针默认是第一个参数也就是左操

  • 举例讲解Java中final关键字的用法

    1. final variable final variable 就是一个常量,一旦被初始化就不可以被改变. class Test1 { final double PI = 3.14; //常量的名称最好大写 public Test1(){ PI = 3.14; } void test(){ System.out.println("PI is: " + PI); } public static void main(String[] args){ Test1 t = new Test1(

  • 举例讲解Java中synchronized关键字的用法

    synchronized关键字顾名思义,是用于同步互斥的作用的. 这里精简的记一下它的使用方法以及意义: 1. 当synchronized修饰 this或者非静态方法或者是一个实例的时候,所同步的锁是加在this或者实例对象引用上面的.比如a,b同为Main类的实例化对象,a调用被同步的方法,和b调用被同步的方法,没有形成互斥.但是不同线程的a对象调用被同步的方法就被互斥了. public synchronized void method(){ //-. } public void method

  • 浅析JavaScript中命名空间namespace模式

    namespace即"命名空间",也称"名称空间" ."名字空间".JavaScript不像C#或Java,有专门的namespace和package语法支持,当JS复杂到一定程度,尤其是引用大量的第三方JS框架和类库之后,命名冲突就会成为一个严重的问题,因此使用JS自己的变通方式建立命名空间很重要. 命名空间有助于减少程序中所需要的全局变量的数量,并且同时有助于避免命名冲突或过长的名字前缀. 关于命名空间的例子: /** * 创建全局对象MYA

  • C++中关键字Struct和Class的区别

    Struct和Class的区别 今天这篇博文主要讲解在C++中关键字struct和class的区别.这篇博文,将会系统的将这两个关键字的不同面进行详细的讲解. 从语法上来讲,class和struct做类型定义时只有两点区别: 1.默认继承权限,如果不指定,来自class的继承按照private继承处理,来自struct的继承按照public继承处理: 2.成员的默认访问权限.class的成员默认是private权限,struct默认是public权限.以上两点也是struct和class最基本的

  • C# 基础入门--关键字

    例子: using System; using System.Collections.Generic; using System.Text; namespace Test { class Program { static void Main(String[]args) { Console.WriteLine("Hello World!"); } } } 1.关键字 class ,这个关键字的用途是声明类,是C#程序最小单元,比如上面例子中,类名叫做Program. 2.关键字 name

  • C++编程中的命名空间基本知识讲解

    命名空间是一个声明性区域,为其内部的标识符(类型.函数和变量等的名称)提供一个范围.命名空间用于将代码组织到逻辑组中,还可用于避免名称冲突,尤其是在基本代码包括多个库时.命名空间范围内的所有标识符彼此可见,而没有任何限制.命名空间之外的标识符可通过使用每个标识符的完全限定名(例如 std::vector<std::string> vec;)来访问成员,也可通过单个标识符的 using 声明 (using std::string) 或命名空间中所有标识符的 using 指令 (C++) (usi

  • C#沉淀之委托的深入讲解

    什么是委托 要传递方法,就必须把方法的细节封装在一钟新类型的对象中,即委托.委托是一种特殊类型的对象,其特殊之处在于,我们以前定义的所有对象都包含数据,而委托只包含一个或多个方法的地址. .NET版本中,委托指向方法的地址.在C++中,函数指针是一个指向内存位置的指针,但它不是类型安全的.开发者无法判断这个指针实际指向什么,像参数和返回值等项就更不知道了. .NET委托是类型安全的类,它定义了返回类型和参数的类型.委托类不仅包含对方法的引用,也可以包含对多个方法的引用. 可以认为委托是持有一个或

随机推荐