目录
一、数组
在 C++ 中,数组是一种存储固定大小的相同类型元素的序列。数组的所有元素都存储在连续的内存位置上。这种数据结构非常适合于存储具有固定数量和相同数据类型的元素集合。
1、声明数组
声明数组的基本语法如下:
数据类型 数组名[数组大小];
例如,声明一个类型为 int 的数组,包含 10 个元素:
int myArray[10];
2、初始化数组
在声明数组时,您可以同时初始化数组:
int myArray[5] = {10, 20, 30, 40, 50};
如果您在初始化数组时没有指定所有元素的值,未初始化的元素将被自动设置为该数据类型的默认值(对于基本数据类型通常是 0):
int myArray[5] = {10, 20}; // 其余元素将被初始化为 0
3、访问数组元素
您可以通过指定索引来访问数组中的元素。数组索引是从 0 开始的,所以数组的第一个元素是 数组名[0] ,第二个元素是 数组名[1] ,依此类推:
int value = myArray[2]; // 访问第三个元素
4、示例
以下是使用数组的简单示例:
#include <iostream>
using namespace std;
int main()
{
int myArray[5] = {11, 22, 33, 44, 55};
// 输出所有数组元素的值
for(int i = 0; i < 5; i++)
{
cout << "Element at index " << i << ":" << myArray[i] << endl;
}
return 0;
}
5、注意事项
- 数组的大小必须在编译时已知,且不能更改。
- 数组索引越界是常见的错误,可能会导致未定义的行为。
- 对于更复杂的用例,您可能需要使用 C++ 的标准模板库(STL)中的容器,如 std::vector ,它提供了可以动态改变大小的数组。
- 数组的元素存储在连续的内存位置上,这使得访问数组元素非常快。
6、数组小练习
计算器支持加减乘除
1、用C语言思路编写
#include <iostream>
using namespace std;
int add(int a,int b)
{
return a+b;
}
int minu(int a,int b)
{
return a-b;
}
int mul(int a,int b)
{
return a*b;
}
float diliv(int a,int b)
{
return a/b;
}
int main()
{
int a = 0;
int b = 0;
char cal;
while(1)
{
cout << "请输入两个数: " << endl;
cin >> a;
cin >> b;
cout << "请输入运算符号+、-、*、/" << endl;
cin >> cal;
switch (cal)
{
case '+':
cout << "两数之和是: " << add(a,b) << endl;
break;
case '-':
cout << "两数之差是: " << minu(a,b) << endl;
break;
case '*':
cout << "两数之积是: " << mul(a,b) << endl;
break;
case '/':
cout << "两数之余是: " << diliv(a,b) << endl;
break;
}
}
return 0;
}
2、用 Lambda 表达式编写
#include <iostream>
using namespace std;
int main()
{
int a = 0;
int b = 0;
char cal;
auto add = [](int a,int b)->int{return a+b;};
auto minu = [](int a,int b)->int{return a-b;};
auto mul = [](int a,int b)->int{return a*b;};
auto diliv = [](int a,int b)->float{return a/b;};
while(1)
{
cout << "请输入两个数: " << endl;
cin >> a;
cin >> b;
cout << "请输入运算符号+、-、*、/" << endl;
cin >> cal;
switch (cal)
{
case '+':
cout << "两数之和是: " << add(a,b) << endl;
break;
case '-':
cout << "两数之差是: " << minu(a,b) << endl;
break;
case '*':
cout << "两数之积是: " << mul(a,b) << endl;
break;
case '/':
cout << "两数之余是: " << diliv(a,b) << endl;
break;
}
}
return 0;
}
数组找最大值
#include <iostream>
using namespace std;
void initArry(int *arry, int len)
{
for(int i=0; i< len; i++){
cout << "请输入第" << i+1 << "个数" << endl;
cin >> arry[i];
}
}
void printArry(int *arry,int len)
{
for(int i=0; i< len; i++){
cout << arry[i] << endl;
}
}
int getMaxFromArray(int *arry, int len )
{
int maxTmp = arry[0];
for(int i=0; i< len; i++){
if(maxTmp < arry[i])
maxTmp = arry[i];
}
return maxTmp;
}
int main() {
int arry[5];
int len = sizeof(arry)/sizeof(arry[0]);
initArry(arry,len);
printArry(arry,len);
cout << "最大数是:" << getMaxFromArray(arry,len) << endl;
}
二、指针
C++完全兼容C语言指针,多出一个 this 指针,在面向对象中再讲解。
这里用一个数值交换的简单函数做以示范:
#include <iostream>
using namespace std;
void swap(int *pa, int *pb)
{
int tmp;
tmp = *pa;
*pa = *pb;
*pb = tmp;
}
int main()
{
int a = 10;
int b = 20;
cout << a << endl;
cout << b << endl;
cout << "两个数发生交换后是:" << endl;
swap(&a,&b);
cout << a << endl;
cout << b << endl;
}
三、字符串 string 类型
C语言中对字符串的表示通常用指针,新手会面临内存泄漏或者段错误等众多问题。
在 C++ 中, string 类是标准库的一部分,用于表示和操作字符串。它是对传统的 C 风格字符串(以空字符 '\0' 结尾的字符数组)的一个更安全、更方便的封装。 string 类是在 <string> 头文件中定义的,并且位于 std 命名空间中。
string 类提供了许多有用的功能和特性,包括:
- 动态大小:与 C 风格的字符串不同, string 对象可以动态改变大小,这意味着你可以在运行时添加或移除字符,而不需要担心分配和释放内存。
- 安全性:由于 string 管理其自己的内存,因此减少了内存泄漏和缓冲区溢出的风险。
- 方便的成员函数: string 类提供了各种操作字符串的方法,如 append() (添加)、 insert() (插入)、 erase() (删除)、 substr() (获取子字符串)等。
- 操作符重载: string 类重载了多个操作符,使得字符串比较、连接和赋值更加直观。例如,你可以使用 + 操作符来连接两个字符串,或者使用 == 操作符来比较两个字符串是否相等。
- 迭代器支持:像其他标准库容器一样, string 类也支持迭代器,使得你可以使用迭代器来遍历字符串中的字符。
- 与 C 风格字符串的兼容性: string 类提供了与 C 风格字符串互操作的功能,例如,你可以使用 c_str() 方法来获取一个与 C 风格字符串兼容的、以 null 结尾的字符数组。
下面是一个简单的 string 类的使用示例:
#include <iostream>
#include <string>
int main() {
std::string str = "Hello, world!";
std::cout << str << std::endl; // 输出字符串
str += " I am a C++ string."; // 字符串连接
std::cout << str << std::endl;
std::string substr = str.substr(7, 5); // 获取子字符串
std::cout << "Substring: " << substr << std::endl;
return 0;
}
在这个示例中,我们创建了一个 string 对象 str ,然后使用不同的方法对其进行操作。这展示了 string 类的灵活性和强大功能。
下面是一个表格,展示了 C++ 中 std::string 类的一些常用成员函数及其功能和参数:
这些函数是 std::string 类中常用的一部分,提供了强大且灵活的字符串操作能力。使用这些函数可以方便地处理和修改字符串数据。