我们有
struct Vector {
float i,j,k;
}
我想将下面声明的vec的所有元素归零(i,j,k = 0)
std::vector <Vector> vec;
vec.resize(num,0);
我不想使用reserve()然后push_back()逐个零。 另一件事是,在成功初始化vec之后,我想在操作之后将vec的所有成员再次设置为零。是否有类似memset的载体?
修改
我比较了Mike Seymour和Xeo的答案中的所有方法
如果它们在循环中频繁重复,size_t size = vec.size();
vec.clear();
vec.resize(size);
是最快的。
答案 0 :(得分:7)
这很简单:
vec.resize(num);
或用所需大小初始化它:
std::vector<Vector> vec(num);
构造函数和resize
都将使用值初始化对象填充新元素。没有默认构造函数的类型初始化对象(例如Vector
)将使所有数字成员初始化为零。
要将所有内容重置为零,
size_t size = vec.size();
vec.clear();
vec.resize(size);
或:
std::fill(vec.begin(), vec.end(), Vector());
或效率较低但具有强大的异常保证:
std::vector<Vector>(vec.size()).swap(vec);
答案 1 :(得分:1)
将所有当前元素设置为0
的C ++方式:
std::fill( vec.begin(), vec.end(), 0 );
或者,或者,重新初始化为给定的大小:
vec.clear();
vec.resize(num, 0);
这可能不如memset
那样有效,但足以满足99%的情况。
答案 2 :(得分:1)
你可以只使用memset
,只要你的Vector
是POD类型:
std::vector<Vector> v(num, 0); // inital fill
// do stuff
memset(&v[0], 0, sizeof(Vector) * v.size());
虽然C ++版本将与std::fill
#include <algorithm>
std::fill(v.begin(), v.end(), 0);