有一个类成员std::vector<double> v
and int n
,在 this 上使用以下内容有什么区别vector
,它没有被初始化:
v.assign(n, 0.0);
或者
v.resize(n, 0.0);
assign
将大小设置为n
并将所有元素值设置为 0.0,而resize
将大小设置为n
并且仅将新元素值设置为 0.0。
如果v
事先为空,则它们是相同的,但assign
可能更清晰。
我猜未初始化,你的意思是它是默认初始化的,即一个空向量,然后
v.assign(n, 0.0);
和
v.resize(n, 0.0);
两者都将向量的大小更改为 ,n
并将所有元素更改为0.0
。请注意,对于非空向量,它们通常不相同,resize()
仅将新元素设置为0.0
.
分配意味着用新属性(大小和元素)替换向量。调整大小意味着保留旧数据并用新元素扩展新向量,以防新大小大于旧大小,否则缩小大小并消除多余的。
运行以下代码两次。一个用于分配第二个用于调整大小(只需取消注释第一个)。
#include <iostream>
#include <vector>
int main ()
{
std::vector<int> vec1;
vec1.assign(7,100);
// vec1.resize(7, 100);
std::cout << "Size: " << vec1.size() << std::endl;
for (unsigned int i(0); i < vec1.size(); ++i)
{
std::cout << vec1[i] << std::endl;
}
vec1.resize(4,5);
// vec1.assign(4,5);
std::cout << "\nSize: " << vec1.size() << std::endl;
for (unsigned int i(0); i < vec1.size(); ++i)
{
std::cout << vec1[i] << std::endl;
}
vec1.resize(10,5);
// vec1.assign(10,5);
std::cout << "\nSize: " << vec1.size() << std::endl;
for (unsigned int i(0); i < vec1.size(); ++i)
{
std::cout << vec1[i] << std::endl;
}
std::cin.get();
return 0;
}