我使用以下方法获取已分配的内存空间,而不必担心如何回收已分配的资源。
#include <vector>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
vector<int> vecInts;
for(int iInd=0; iInd<10; i++)
vecInts.push_back(iInd);
int* pInt = &vecInts[0]; // Is this a good method?
// now can I use pInt to modify the value of the vecInts?
// I will NOT resize the vector and just simply manipulate the values inside
return 0;
}
但是,我不确定这种方法是否合适。
谢谢
答案 0 :(得分:5)
是的,考虑到你提到的注意事项(以及其他明显的注意事项,例如没有使用指针进入超出范围的矢量等),这很好。指针的有效和无效的方式与进入容器的迭代器完全相同。
答案 1 :(得分:3)
这是一个很好的方法。当向量超出范围时,将自动释放内存。在现代STL实现中,vector
有一个方法data()
,它返回指向内存开头的指针,相当于&v[0]
,但看起来更清晰。
这种方法也有一个很好的属性,每个元素都设置为0(如果它是一个对象,则默认构造)。
为了提高效率,如果事先知道向量的长度,可以将其作为构造函数参数提供。然后所有内存将被分配一次。 E.g。
vector<char> buffer(bufSize);
fread(buffer.data(), 1, buffer.size(), file);
并且,正如您在评论中提到的那样,请注意,如果缓冲区已调整大小,buffer.data()
将会更改,并且当缓冲区超出范围时会释放{/ p>。