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;
}

 

posted @ 2016-11-30 14:43  郭志凯  阅读(628)  评论(0编辑  收藏  举报