我有一个std::vector<std::string>要在循环中重复使用.它是确定std::move的元素呢?如果我将第i个元素移出,那么ith 插槽将进入一个未定义但有效的状态,但是矢量呢?它的状态是否仍然有效且有效?另外,我可以clear()在下一次迭代中重复使用向量吗?
编辑:请在标记复制之前阅读问题.我问的是v2做完后的状态std::move(v2[0]),不是std::move(v2).v2我也做了之后再重复使用v2.clear().这与建议的重复有什么相似之处?
编辑:代码示例:
struct Foo {
string data;
/* other data memebers */
void workOnData();
}
std::vector<std::string> buffer;
Foo foo;
while (1) {
buffer.clear();
loadData(buffer); // push data to buffer, at least one element in buffer guaranteed
foo.data.assing(std::move(buffer[0])); // please don't ask is Foo necessary or why workOnData has to be a member method. THIS IS A SIMPLIFIED EXAMPLE!
foo.workOnData();
}
Run Code Online (Sandbox Code Playgroud)
Ben*_*ley 24
std :: move元素可以了吗?
是的,没关系.
如果我将第i个元素移出,那么ith插槽将进入未定义但有效的状态
它使元素处于有效但未指定的状态.这两个词之间的区别在C++中很重要,但对这个问题可能并不重要.只是想我应该指出来.
但是矢量怎么样?
虽然其中一个元素处于未指定状态,但该向量处于有效且指定良好的状态.
另外,我可以清除()然后在下一次迭代中重用该向量吗?
是.当然.虽然你可以做更多的事情.与移动向量不同,您仍然可以依赖具有相同大小,相同容量的向量,以及除刚刚移动的元素之外的所有元素保持不变.除了元素的所有引用和迭代器(包括刚刚移动的元素)仍然有效.