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,进程&信号,多线程&线程同步
为啥当 T=std::string custom Vector C++ 时在 push_back(T&&) 上出现 SIGSEGV 错误