提问人:ABu 提问时间:12/21/2012 最后编辑:jotikABu 更新时间:4/25/2016 访问量:97
为什么这个程序有这种行为(push_back)?
Why this program has this behaviour (push_back)?
问:
代码:
// test2.cpp
#include <vector>
#include <iostream>
struct test_class
{
test_class() = default;
test_class(const test_class& t)
{
std::cout << "Copied" << std::endl;
}
};
int main()
{
test_class a;
std::vector<test_class> v;
for (int i = 0; i < 5; ++i) {
v.push_back(a);
std::cout << std::endl;
}
}
行为:
$ g++ --version | grep g++
g++ (Ubuntu/Linaro 4.7.2-2ubuntu1) 4.7.2
$ g++ -std=c++11 test2.cpp
$ ./a.out
Copied
Copied
Copied
Copied
Copied
Copied
Copied
Copied
Copied
Copied
Copied
Copied
每个执行“未定义”的副本数量(其中只能执行一个副本)。push_back
这是怎么回事?
答:
1赞
n. m. could be an AI
12/21/2012
#1
A 可能会导致超出其分配的存储,从而导致重新分配,从而导致复制内容。push_back
vector
3赞
Kocka
12/21/2012
#2
向量像数组一样分配连续内存。如果内存末尾没有更多空间,则必须重新分配整个向量。在此之后,它会将元素从旧位置复制到新位置并删除旧元素。
您可以将其初始化为能够容纳至少 5 个元素,因此在您的示例中不会有内存分配和复制:
std::vector<test_class> v(5);
评论
0赞
Quentin
4/25/2016
您的代码将创建一个长度为 5 的向量,而不是容量为 5 的向量。
上一个:转换和验证字符串
评论