C++中数组很坑,有没有类似Python中list的数据类型呢?类似的就是vector!vector 是同一种类型的对象的集合,每个对象都有一个对应的整数索引值。和 string 对象一样,标准库将负责管理与存储元素相关的内存。我们把 vector 称为容器,是因为它可以包含其他对象。一个容器中的所有对象都必须是同一种类型的。
vector对象的定义和初始化
vector<T> v1; | 保存类型为 T 对象。默认构造函数 v1 为空。 |
vector<T> v2(v1); | v2 是 v1 的一个副本。 |
vector<T> v3(n, i); | v3 包含 n 个值为 i 的元素。 |
vector<T> v4(n); | v4 含有值初始化的元素的 n 个副本。 |
个数,元素值指定每个元素的初始值】
vector对象动态增长:
vector 对象(以及其他标准库容器对象)的重要属性就在于可以在运行时高效地添加元素。
【注意:因为 vector 增长的效率高,在元素值已知的情况下,最好是动态地添加元素。】
值初始化:
#include <iostream> #include <string> #include <vector> int main() { std::vector<int> a; std::vector<int> b(a); std::vector<int> c(10, 23); std::vector<std::string> svec(10, "null"); std::vector<std::string> svec2(10, "hi!"); std::vector<std::string> svec3(10); return 0; }注意,没有=号!
vector对象操作方法
和string类似!v.empty()
v.size()
包括 vector 的元素类型vector<int>::size_type】
v.push_back(t)
#include <iostream> #include <string> #include <cctype> #include <vector> int main() { // read words from the standard input and store them as elements in a vector std::string word; std::vector<std::string> text; // empty vector while (std::cin >> word) { text.push_back(word); // append word to text for(std::vector<int>::size_type ix =0; ix != text.size(); ++ix) std::cout<<"Now text["<<ix<< "]is: "<<text[ix]<<std::endl; } return 0; }结果为:
Hello Now text[0]is: Hello world! Now text[0]is: Hello Now text[1]is: world!注意:
v[n]
v1 = v2
v1 == v2
!=, <, <=,>, and >=
Have their normal meanings保持这些操作符惯有的含义。一个简单的例子
读入一段文本到 vector 对象,每个单词存储为 vector 中的一个元素。把vector 对象中每个单词转化为大写字母。输出 vector 对象中转化后的元素,每八个单词为一行输出。
假设文本为:in the vector. transform each word into uppercase letters. Print the transformed elements from the vector, printing eight words to a line.
【2014.06.24备注:使用c++11新特性的改写例子在C/C++中字符串String及字符操作方法(http://blog.csdn.net/zhanh1218/article/details/33306481)一文中】
#include <iostream> #include <string> #include <vector> std::string deal_word(std::string word) { std::string WORD; // 创建空字符串 for(std::string::size_type ix =0; ix != word.size(); ++ix) { if (not ispunct(word[ix])) { WORD += toupper(word[ix]); //连接非标点字符到字符串 } } return WORD; } int main() { std::string word; // 缓存输入的单词 std::vector<std::string> text; // empty vector std::cout<<"Please input the text:"<<std::endl; //提示输入 while (std::cin >> word and word != "INPUTOVER") // INPUTOVER 用于标示输入结束,也可以ctrl + z停止输入 { word = deal_word(word); // 单词处理 text.push_back(word); // append word to text } for(std::vector<int>::size_type ix =0, j = 0; ix != text.size(); ++ix, ++j) { if (j==8) // 8个单词一行 { std::cout<<std::endl; //换行 j = 0; //重新计数 } std::cout<<text[ix]<<" "; //加空格! } return 0; }结果为:
Please input the text: in the vector. transform each word into uppercase letters. Print the transformed elements from the vector, printing eight words to a line. INPUTOVER IN THE VECTOR TRANSFORM EACH WORD INTO UPPERCASE LETTERS PRINT THE TRANSFORMED ELEMENTS FROM THE VECTOR PRINTING EIGHT WORDS TO A LINE
本文由@The_Third_Wave(Blog地址:http://blog.csdn.net/zhanh1218)原创。由于还有部分内容没有接触,只讲了大概没有原因,会不定期更新,有错误请指正。
如果你看到这篇博文时发现没有不完整,那是我为防止爬虫先发布一半的原因,请看原作者Blog。
如果这篇博文对您有帮助,为了好的网络环境,不建议转载,建议收藏!如果您一定要转载,请带上后缀和本文地址。