初始化结构的向量

Shi*_*bli 3 c++ structure initialization vector

我有

struct Vector {

    float i,j,k;
}
Run Code Online (Sandbox Code Playgroud)

我想将以下声明的vec的所有元素归零(i,j,k = 0)

std::vector <Vector> vec;
vec.resize(num,0);
Run Code Online (Sandbox Code Playgroud)

我不想使用reserve()然后push_back()逐个零.另一件事是,在成功初始化vec之后,我想在操作之后将vec的所有成员再次设置为零.有没有类似memset的矢量?

编辑: 我比较了Mike Seymour和Xeo的答案中的所有方法,size_t size = vec.size(); vec.clear(); vec.resize(size);如果它们在循环中频繁重复,则结果 最快.

Mik*_*our 7

这很简单:

vec.resize(num);
Run Code Online (Sandbox Code Playgroud)

或者用所需的大小初始化它:

std::vector<Vector> vec(num);
Run Code Online (Sandbox Code Playgroud)

构造函数和resize将使用值初始化对象填充新元素.没有默认构造函数(例如您的Vector)的类型的初始化对象将使所有数字成员初始化为零.

要将所有内容重置为零

size_t size = vec.size();
vec.clear();
vec.resize(size);
Run Code Online (Sandbox Code Playgroud)

要么:

std::fill(vec.begin(), vec.end(), Vector());
Run Code Online (Sandbox Code Playgroud)

或者,效率较低但具有强大的例外保证:

std::vector<Vector>(vec.size()).swap(vec);
Run Code Online (Sandbox Code Playgroud)