String & Vector

Posted xero10

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了String & Vector相关的知识,希望对你有一定的参考价值。

String

string类(class)在库<string>中被定义,定义在std namespace中。注意,string是一个class

可以使用"="对string对象进行赋值,用"+"连接两个string;不必考虑被赋值的string是否有足够的大小。C++可以自动地将双引号中的字符串转换成string类型。<,>,<=,>=都可以直接对string对象进行比较

string类有两个constructor,可以将其内容初始化为空或某个字符串

string phrase;	// phrase为空
string noun("ants");
string noun = "ants"	// noun的内容均为"ants"

对string来说,和其他数据类型相同,">>"会在遇到第一个whitespace时停止。

getline(cin, str);	// 获得一整行输入
getline(cin, str, '?');	// 读取输入到'?'停止。第三个参数叫做delimiter,会被从输入中读取并丢弃

getline函数的返回类型不是void,而是指向第一个参数,如

getline(cin, s1) >> s2 == getline(cin, s1); cin >> s2;

每个string对象都有一个成员函数length,它返回该对象表示字符串的长度

当对string类的对象使用“[]”时,并不会进行边界检查。通过成员函数at可以进行边界检查

str[6] == str.at(6)

strcpy并不能将string对象作为参数,要进行比较的话需要用成员函数c_str进行转换
char carr[] = "test";	// c string
string s = "test";	// string object
strcpy(carr, s);	// wrong
strcpy(carr, s.c_str);	// valid


Vector

vector的功能类似数组,不过可以动态变化大小,它是C++标准库STL的一部分

vector<int> v;

vector<type>是一个template class,意味着可以插入任何type(包括class)而产生一个该种type类的vector。例如vector<int>是一个class名,所以这样声明时调用了类vector<int>的默认constructor,它将vector对象置空

vector可以通过"[]"进行访问。与数组不同的是,不能用"[]"对某个元素进行初始化,"[]"只能改变已被赋值的元素。首次在vector中添加元素时需要使用函数push_back,它会依次将元素加入到下一个可用的位置

vector<int> a;
a.push_back(1);
a.push_back(10);
a.push_back(101);

vector的赋值符号"="会令左边的vector等于右边的vector

vector中元素的数量叫做size,成员函数size()可以返回当前的size大小,返回值类型是unsigned int,而不是int

vector有一个可以使用一个传入参数的constructor,并将对应个数的元素初始化成对应类型的0。如果vector的类型是class,该class的默认constructor会被调用

vector<int> v(10);	// initialize v[0] ~ v[9] to 0

vector<int> v;
for(unsigned int i = 0; i < 10; i++)	// ONLY can happen immediately after declaration
	v[i] = i;

vector的定义在库<vector>中,使用std namespace

当i >= v.size()时,访问v[i]不会报错,但这样显然会产生错误的结果


任意时刻vector以现有被分配的空间所能容纳的元素个数叫做capacity,成员函数.capacity()可以返回vector的capacity值。当vector的capacity不足时,它会自动增加。可以用成员函数.reserve()显式增加vector的capacity,如

v.reserve(32);	// set capacity to at least 32 elements
v.reserve(v.size() + 10);	// set capacity to at least 10 more than current size

注意可以通过.reserve()增加vector的capacity,但如果参数小于当前capacity的话不一定会减少capacity。成员函数.resize()可以改变vector的size,如果增加了新成员会被constructor初始化,如果减少了capacity则后面的元素会被丢弃


以上是关于String & Vector的主要内容,如果未能解决你的问题,请参考以下文章

C++ 无法使用 vector<string> 作为返回类型

没有匹配函数调用‘std::vector::push_back(std::string&)’

比较 list<string> 和 vector<string> 中的字符串元素

C++1函数重载,类和对象,引用,/string类,vector容器,类继承,类多态,/socket,进程&信号,多线程&线程同步

string分割

为啥当 T=std::string custom Vector C++ 时在 push_back(T&&) 上出现 SIGSEGV 错误