【C++grammar】vector类和字符串字面量

186 阅读1分钟

C++的vector类

用数组存放数据时,容量大小不可变,vector对象容量可自动增大。
vector的操作:
在这里插入图片描述
调用push_back函数时,vector对象的容量可能会增大。
观察下列操作对vector的影响:

#include <vector>
#include <iostream>
#include <string>

#include "Helper.h"
int main()
{
	//用c++11的列表初始化,创建vector对象words1
	std::cout<< "用c++11的列表初始化,创建vector对象words1"<< std::endl;
	std::vector<std::string> words1{"Hello","World!","Welcome","To","C!"};
	PRINT(words1);
	std::cout << std::endl;
	//删除words1最后一个元素
	std::cout << "删除words1最后一个元素" << std::endl;
	words1.erase(words1.end()-1);
	PRINT(words1);
	//在words1尾部追加元素
	std::cout << "在words1尾部追加元素" << std::endl;
	words1.push_back("C++!");
	PRINT(words1);
	std::cout << std::endl;
	//用迭代器拷贝words1的内容以创建words2
	std::cout << "1、用迭代器拷贝words1的内容以创建words2" << std::endl;
	std::vector<std::string> words2(words1.begin()+2, words1.end());
	PRINT(words2);
	std::cout << std::endl;
	//在words中插入元素
	std::cout << "2、在words中插入元素" << std::endl;
	words2.insert(words2.begin(),"Hello!");
	PRINT(words2);
	std::cout << std::endl;
	//用拷贝构造创建words3
	std::cout << "3、用拷贝构造创建words3" << std::endl;
	std::vector<std::string> words3(words2);
	PRINT(words3);
	std::cout << std::endl;
	//用[]修改words的元素
	std::cout << "4、用[]修改words的元素" << std::endl;
	words3[3] = "C Plus Plus";
	PRINT(words3);
	std::cout << std::endl;
	//创建words4,初始化为多个相同的字串
	std::cout << "5、创建words4,初始化为多个相同的字串" << std::endl;
	std::vector<std::string> words4(4, "C++!");
	PRINT(words4);
	std::cout << std::endl;
	//words3与words4交换
	std::cout << "6、words3与words4交换" << std::endl;
	words3.swap(words4);
	PRINT(words3);
	PRINT(words4);
	std::cout << std::endl;

	return 0;
}

在这里插入图片描述

字符串字面量

C++11原始字符串字面量

语法: R “delimiter( raw_characters )delimiter”
“Raw String literals”在程序中写成什么样子,输出之后就是什么样子。我们不需要为“Raw String literals”中的换行、双引号等特殊字符进行转义。

#include <vector>

#include <iostream>
const char* s1 = R"(Hello
World)";

// s1效果与下面的s2和s3相同

const char* s2 = "Hello\nWorld";

const char* s3 = R"NoUse(Hello 
World)NoUse";

int main() {

    std::cout << s1 << std::endl;
    std::cout <<std::endl;
    std::cout << s2 << std::endl;
    std::cout << std::endl;
    std::cout << s3 << std::endl;

}

在这里插入图片描述

C++14的字符串字面量

C++14将运算符 ""s 进行了重载,赋予了它新的含义,使得用这种运算符括起来的字符串字面量,自动变成了一个 std::string 类型的对象。

auto hello = "Hello!"s;              // hello is of std::string type
auto hello = std::string{"Hello!"};  // equals to the above
auto hello = "Hello!";               // hello is of const char* type

已知’\0’在字符串里面代表结束符号

#include <string>
#include <iostream>
int main() {
    using namespace std::string_literals;
    std::string s1 = "abc\0\0def";
    std::string s2 = "abc\0\0def"s;
    std::cout << "s1: " << s1.size() << " \"" << s1 << "\"\n";
    std::cout << "s2: " << s2.size() << " \"" << s2 << "\"\n";
}

在这里插入图片描述