您的位置:首页 > 编程语言 > C语言/C++

3、字符串、向量、数组

2017-09-05 12:13 162 查看
1、使用using声明就无需专门的前缀(如std::)。头文件不应包含using声明

#include <iostream>
using std::cin;
using std::cout;
using std::endl;
int main()
{
cout << "Enter two numbers:" << endl;
int v1 = 0, v2 = 0;

cin >> v1 >> v2;
cout << "The sum of " << v1 << " and " << v2 << " is " << v1 + v2 << endl;
return 0;
}


2、string:标准库类型string表示可变长的字符序列。

#include <string>
using std::string;
int main()
{
//字符串初始化
string s1("11111cccc");
string s2(4,'a');//s2="aaaa"
string s3 = s1 + "123";//可以
string s4 = "123" + "avd";//不可以直接加两个字面值
}


3、string对象操作



(1)getline读取一行,保留输入时的空格

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


(2)s.size()返回的是一个无符号整数,string::size_type类型值,size_type在类string中定义

(3)字符串字面值和string是不同的类型!!!

(4)C语言头文件xx.h,C++兼容但是名字改为cxx;c代表是源c语言中文件

//遍历字符串for
string str("Abcdefg");
for(auto &c : str)
c = toupper(c);//c是引用,操作c就是直接操作str
cout << s <<endl;


4、vector表示对象的集合,是容器的一种

#include <vector>
using std::vector;


(1)初始化,vector下标类型也是size_type

vector<int> a(10,8);//10个int元素都被初始化为8
vector<string> p={"1","ab","title"};


(2)添加元素xx.push_back,尾部插入。下标可以访问已存在的元素,但是不能在初始化为空的vector中用下标插入元素。

//从键盘输入元素压入
string word;
vector<string> text;
while(cin >> word)
text.push_back(word);


5、迭代器iterator,指针是一种迭代器,支持访问容器中一个元素到另一个元素操作

xx.begin() 返回第一个元素的迭代器

xx.end()返回尾元素下一个位置的迭代器

//把字符串第一个字母边长大写
string s("somebody");
if(s.begin() != s.end()){
auto it = s.begin();
*it = toupper(*it);
}


C++在循环中习惯于使用!=,因为所有标准库容器都定义了==和!=,但是他们中的大多数没有定义<运算。凡是使用了迭代器的循环体,都不要向迭代器所属的容器添加元素。

6、数组,不确定元素个数用vector

(1)定义数组类型不允许使用auto

(2)复杂的数组声明,由内向外,由右向左

(3)数组下标类型为size_t

int *ptrs[10];      //10个指针的数组
int (*a)[10]=&b;    //a指向一个含有10int元素的数组
int *(&c)[8] = ptr; //c是一个数组的引用,该数组有10个指针

int a[] = {0,1,2,3,4};
auto b(a);          //b是一个指针,指向数组a的第一个元素

//把row定义成一个含有4个整数的数组的引用,然后将其绑定到ia的第二行。
int (&row)[4] = ia[1];


(4)auto和decltype的使用能够避免在数组前面加上一个指针类型。

int a[3][4];
int (*p)[4] = a;        //p指向含有4个整数的数组
p = &a[2];

//外层一行一行变换,p指向含有4个整数的数组,每行首地址,auto p = begin(a)这时p是个二级地址
for(auto p = begin(a); p != end(a); ++p)
for(auto q = begin(*p); q != end(*p); ++q)
cout << *q << '';
cout << endl;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  C++ 字符串 向量 数组