c++字符串、向量和数组

前一段时间忙着赶项目进度,现在就接着之前学习的内容继续学习。

1、c++的内置类型(数字和字符等),体现了大多数计算机硬件本身具备的能力。

2、位于头文件中的代码一般不用using进行声明,因为头文件的内容会拷贝到所有引用它的文件中去。

3、关于直接初始化和拷贝初始化:

        拷贝初始化:使用等号进行初始化即为拷贝初始化,例如:string s5 = "everyone can be a better man ";

        直接初始化:不使用等号进行初始化即为直接初始化,例如:string s5("everyone can be a better man");

        建议使用的时候尽量使用直接初始化,因为拷贝初始化会创建一个临时对象。

4、使用cin>>对string对象执行读取操作时,会自动忽略遇到的空白(空格符、换行符、制表符)并从第一个真正的的字符开始读起,直到遇见下一处空白。: 

//example 
 int main()
{
       string s;
       cin>>s;
       cout << s << endl  ;//如果程序输入的是"hello word!"输出为"hello"
      return 0;
}

5、使用getline读取输入:getline函数的参数是一个输入流和一个string对象,函数从给定的输入流中读取内容直到遇到换行符为止。

int main()
{
   string line;
   while (getline(cin,line))
      cout << line << endl;
   return 0;
}

6、string::size_type类型:string对象包含的字符个数,他是一个无符号类型的值能够存放下任何string对象的大小。

7、如果一条表达式中已经有在用.size()函数了,就不要使用int了。避免混用int和unsigned。

8、关于两个string对象的对比:

  1.   如果两个string对象的长度不同,而且较短的string对象的每个字符都与较长string对象对应位置的字符相同,那么就说较短的string对象小于较长的对象。
  2. 如果两个string对象对应位置的字符都不相同,则比较第一对相异字符。             

9、当把string对象和字符字面值混在一条语句中使用时,要确保+号的两边至少有一个是string对象。

10、cctypet头文件中用来处理string对象的方法:

                

11、c++在引用c中的头文件时将.h去掉,再在前面加上c。例如:ctype.h->cctype。

12、使用范围for循环可以遍历string对象中的每一个元素。如果想改变string中的元素要把循环变量定义成引用类型。

//example
string str("some string");
for (auto c:str)
   cout << c << endl;

13、string对象可以使用下标运算符遍历其中的每一个元素[i],使用时务必确保下标的有效。

//使用下标遍历string对象中元素
string s("everyone can be a better one");
for(int i =0;i<(s.size()-1);i++)
{
   cout << s[i];//可以实现输出string中的每一个元素
}

14、vector可以容纳绝大多数类型的对象作为其元素,但是不能为引用(引用不是对象没有分配内存)

15、c++提供的几种初始化方式:

            (1)、拷贝初始化;(2)、类内初始化;(3)、列表初始化。

16、如果循环体内有向vector对象添加元素的语句,不能使用范围for循环。

17、要使用vector的size_type,需首先定义它是由那种类型定义的。

//example
vector <int>::size_type;

18、有关数组:

               (1)数组的维数编译的时候应该是一个常数,函数内部定义数组默认初始化会使他含有未定义的值。

               (2)初始化字符数组要考虑最有一个是'\0'

               (3)数组不支持用另外一个数组拷贝和赋值

               

//关于复杂数组的声明(从右向左结合)
int *ptrs[10];//一个包含10个整形指针的数组
int &refs[10];//错误:不存在包含引用的数组(因为引用不是对象)
int (*parray)[10]; //指向数组的指针
int (&refs)[10];//指向数组的引用

19、使用auto和decltype对数组操作返回的对象不同。

int ia [] = {3,3,3,3,33};
auto ia2(ia) ; //返回指向第一个元素的指针
decltype(ia) ia3;//返回一个数组

20、数组的begin和end(基于c++11标准)

//基于c++11
int ia [] = {2,2,2,2,2};
int *beg = begin(ia);
int * end = end(ia);

21、只要指针指向数组中的元素就可以执行下标运算访问元素,内置类型下标运算所用的索引值不是无符号类型的。

22、c风格字符串以'\0'结尾,使用数组时真正用的是指向数组首元素的的指针。

23、指针没有定义加法运算,减法限于指向同一个数组

24、可以使用数组初始化vector

int int_arr[]={2,3,4,5,6,7};
vector<int>ivec(begin(int_arr),end(int_arr));

25、多维数组:

constexpr size_t rowCnt = 3, colCnt =4;
int ia[rowCnt][colCnt];
size_t cnt =0;
for (auto &row:ia)
    for(auto & col:row)
       {
           col = cnt;
           ++cnt;
       }
//使用范围for循环处理多维数组时,除了最内层的循环外,替他循环的控制变量都应该是引用类型

26、缓冲区溢出:越界访问引起的错误。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值