Con*_*nst 2 c++ stdvector emplace c++17
我在cppreference.com上读过新的(自C++ 17以来)std::vector::emplace_back对插入元素的referance返回值.
返回值
- (无)(直到C++ 17)
- 对插入元素的引用.(自C++ 17起)
我在想,在将元素插入向量时,为什么我们需要对它进行反馈?这可能是多么有用或者这个新回归的用例是什么?
这是我编写的示例代码,该功能.
#include <vector>
int main()
{
std::vector<int> myVec;
for(int i = 0; i < 3; ++i)
{
int& newElement = myVec.emplace_back(i);
^^^^^^^ => why standard should expose the element after inserting.
}
}
Run Code Online (Sandbox Code Playgroud)
更改由P0084完成.作者给出的动机是
我经常发现自己想要使用
emplace_frontor 创建容器emplace_back元素,然后访问该元素,要么进一步修改它,要么只是使用它.所以我发现自己编写的代码如下:Run Code Online (Sandbox Code Playgroud)my_container.emplace_back(...); my_container.back().do_something(...);也许:
Run Code Online (Sandbox Code Playgroud)my_container.emplace_back(...); do_something_else(my_container.back());相当常见的具体情况是我需要构造一个对象,然后才能获得将其置于最终状态所需的所有信息,例如当我从文件中读取它时:
Run Code Online (Sandbox Code Playgroud)my_container.emplace_back(); // Default construct. my_container.back().read(file_stream); // Read the object.这种情况经常发生,我倾向于编写调用某些版本
emplace并返回的小模板,这对我来说似乎没有必要.我相信emplace_front和emplace_back函数应该返回对新创建元素的非const引用,以符合当前标准库在实际中返回有用信息的趋势.原始emplace提案中的疏忽(就我而言)他们没有.