string和C风格字符串
#include <iostream> #include <iterator> #include <cstring> #include <string> //虽然改变s后,仍然输出正确,但是切记: //无法保证c_str()返回的数组一直有效,保险做法是拷贝一份 int main() { std::string s = "C++是人类的好朋友!"; const char* array = s.c_str(); //未改变s时输出 std::cout<<array<<std::endl; //改变s后输出 s += " C#是微软请来的逗比吗?"; std::cout<<array<<std::endl; }
改进后
#include <iostream> #include <iterator> #include <cstring> #include <string> //虽然改变s后,仍然输出正确,但是切记: //无法保证c_str()返回的数组一直有效,保险做法是拷贝一份 int main() { std::string s = "C++是人类的好朋友!"; const char* array = s.c_str(); char* cArray = new char(strlen(array)); strcpy(cArray,array); //未改变s时输出 std::cout<<cArray<<std::endl; //改变s后输出 s += " C#是微软请来的逗比吗?"; std::cout<<cArray<<std::endl; }
使用数组初始化向量
#include <iostream> #include <iterator> #include <cstring> #include <string> #include <vector> int main() { int array[] = {0,1,2,3,4,5,6,7,8,9}; std::vector<int> intVec1(std::begin(array),std::end(array)); std::vector<int> intVec2(&array[3],&array[5]); std::cout<<"intVec1:"<<intVec1.size()<<std::endl; std::cout<<"intVec2:"<<intVec2.size()<<std::endl; for(auto i : intVec1) std::cout<<i<<" "; std::cout<<std::endl; for(auto i : intVec2) std::cout<<i<<" "; std::cout<<std::endl; }
使用范围for语句遍历多维数组(切记,除了最底层,其他for,都需要使用引用,不加引用,auto会转化为指针)
#include <iostream> #include <iterator> #include <cstring> #include <string> #include <vector> int main() { int array[10][10] ; int cnt = 0 ; for(auto& row : array) for(auto& col : row) col = cnt++ ; for(auto& row : array) for(auto& col : row) std::cout<<col<<std::endl; }