'Can I std::move() an element out of a std::vector?

I have a std::vector<std::string> to be re-used in a loop. Is it ok to std::move elements out? If I moved the ith element out, then ith slot goes into an undefined but valid state, but what about the vector? Is its state still defined and valid? Also, can I clear() and then reuse the vector in the next iteration?

EDIT: please read the question before you flag for duplication. I'm asking the state of v2 after doing std::move(v2[0]), not std::move(v2). Also I reuse v2 after I did v2.clear(). How is that similar to the suggested duplication?

EDIT: code example:

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.assign(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();
}


Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source