用vector代替数组,有没有必要
1个回答
展开全部
没必要。
用new动态分配数组,需要时时刻刻记住delete,很容易造成memory leak。使用vector和string则消除了这个负担,因为它们有自己的内存管理,在它们的析构函数中会自动释放内存。
通常情况下用vector代替动态数组,如果要存储的元素类型是字符类型时使用string。
所有适合于序列容器的STL算法,vector和string都可以使用。所以使用vector和string会带来更多的便利。
许多string的实现采用了“引用计数”,用于消除不必要的内存分配和不必要的字符拷贝。但这样的实现在多线程环境中,需要注意一下因支持线程安全而导致的性能问题。
如果所使用的string以“引用计数”方式实现,同时又运行在多线程环境中,并因此影响了程序效率。考虑以下三种选择:(1)是否可以通过改变某个预处理变量禁用引用计数。(2)寻找另外一个不使用“引用计数”实现的string。(3)使用vector<char>代替string,vector不允许使用引用计数,所以不会有多线程性能问题。
VC编译器自2005版本之后,大概是考虑到线程安全问题,string均没有以“引用计数”方式实现。
用new动态分配数组,需要时时刻刻记住delete,很容易造成memory leak。使用vector和string则消除了这个负担,因为它们有自己的内存管理,在它们的析构函数中会自动释放内存。
通常情况下用vector代替动态数组,如果要存储的元素类型是字符类型时使用string。
所有适合于序列容器的STL算法,vector和string都可以使用。所以使用vector和string会带来更多的便利。
许多string的实现采用了“引用计数”,用于消除不必要的内存分配和不必要的字符拷贝。但这样的实现在多线程环境中,需要注意一下因支持线程安全而导致的性能问题。
如果所使用的string以“引用计数”方式实现,同时又运行在多线程环境中,并因此影响了程序效率。考虑以下三种选择:(1)是否可以通过改变某个预处理变量禁用引用计数。(2)寻找另外一个不使用“引用计数”实现的string。(3)使用vector<char>代替string,vector不允许使用引用计数,所以不会有多线程性能问题。
VC编译器自2005版本之后,大概是考虑到线程安全问题,string均没有以“引用计数”方式实现。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询