C++中的数组、vector、string

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/oqqWang1234567/article/details/81809942

        C++语言是兼容C语言的,因此C++数组可以使用C语言风格传统数组。但是C语言格式的数组在很多的时候使用不是那么方便。在C++中可使用vector代替。

         本文只考虑char型数组与Vector、string之间的关系。

          如果使用字符串,考虑使用string,但如果仅仅考虑数组,则应该使用vector代替,因为char数组与字符串毕竟不太相同。

          char型数组与vector可以相互转换:

          1、数组转vector

float arrHeight[] = { 1.68,1.72,1.83,2.05,2.35,1.78,2.1,1.96 };  
vector<float> vecHeight(arrHeight, arrHeight+sizeof(arrHeight)/sizeof(float));  

         2、vector转数组 
         由于vector内部的数据是存放在连续的存储空间,vector转数组事实上只需要获取vector中第一个数据的地址和数据的长度即可。如果仅仅是传参,无需任何操作,直接传地址即可,如果要进行数据复制,可以借用内存拷贝函数“memcpy”。例如:

float *buffer = new float[sizeof(arrHeight)];  
if (!vecHeight.empty())  
{  
    memcpy(buffer, &vecHeight[0], vecHeight.size()*sizeof(float));  
}  

3、应用建议

1,vector作为动态数组,它的实现方法是:预先分配一个内存块,当感觉不够用的时候,再分配一个更大的内存块,然后自动将之前的数据拷贝到新的内存块中。

所以,出于效率考虑,如果实现知道待存储的数据长度,可以使用resize函数开辟足够的内存,避免后续的内存拷贝。

参考https://blog.csdn.net/ei1990/article/details/80175610

猜你喜欢

转载自blog.csdn.net/oqqWang1234567/article/details/81809942