为什么向量的容量在传递给函数后变得等于它的大小?
Why does a vector's capacity become equal to it's size after being passed to a function?
如标题所述,当我将一个向量传递给另一个函数时,它的容量变得等于函数调用时的大小。
void sizeCheck(std::vector<int> test)
{
std::cout << "Size: " << test.size() << std::endl;
std::cout << "Capacity: " << test.capacity() << std::endl;
std::cout << std::endl;
}
int main()
{
std::vector<int> test;
for(int i = 0; i < 10; ++i)
{
test.push_back(i);
std::cout << "Size : " << test.size() << std::endl;
std::cout << "Capacity: " << test.capacity() << std::endl;
std::cout << std::endl;
}
test.resize(0);
for(int i = 0; i < 10; ++i)
{
test.push_back(i);
sizeCheck(test);
}
}
上述代码的第一个输出系列表明,vector的容量比通常预期的增加了;然而,第二个系列的输出表明,大小总是等于容量。我假设这意味着容量每次被推回一个。
我明白,通常情况下,最好只是通过引用传递(const或不是),但是有没有任何情况下,我需要传递一个向量的副本,并以某种方式操作它,而不影响我的原始数据?在这种情况下,如果每次使用push_back,它都必须重新定位向量,那么按值传递将是低效的。
之类的v2.assign(v1.first(), v1.end());
func(v2);
可以工作,假设func()通过引用接受一个向量,但对我来说似乎很奇怪,如果没有最好的选择,我可以通过值将一个向量传递给一个函数。
在c++中,您可以根据具体情况选择通过值传递,通过引用传递,或者通过指针传递。
将vector 通过value传递给函数。正在生成向量的副本。vector复制构造函数使新vector的容量与被复制vector的大小相同。
如果通过引用传递vector ,或者通过指针传递vector ,则不进行复制,则输出原vector的大小/容量:
void sizeCheck(std::vector<int> &test)
{
std::cout << "Size: " << test.size() << std::endl;
std::cout << "Capacity: " << test.capacity() << std::endl;
std::cout << std::endl;
}
void sizeCheck(std::vector<int> *test)
{
std::cout << "Size: " << test->size() << std::endl;
std::cout << "Capacity: " << test->capacity() << std::endl;
std::cout << std::endl;
}
相关文章:
- 如果编译的源代码是特定于它编译的硬件的,我们如何分发它
- 是 C++ gcc HEAD 10.0.0 20190 相对于好友函数的错误吗?
- STD ::在模板函数中应用于构造函数
- 使自由函数的行为类似于成员函数 (C++)
- 将 lua 脚本转换为等效于它的指令(操作码)
- 可以将属性应用于构造函数参数
- 严格别名规则是否适用于跨函数调用
- 为什么"return 0"适用于在函数中返回指针,但不适用于参考?
- 如何在另一个类函数中使用类,而不依赖于它在C++中的声明位置
- 将自适应阈值应用于范围函数 opencv c++
- 创建独立于构造函数的对象指针
- 在本地将 'using std::foo' 指令应用于构造函数初始值设定项列表 (C++)
- Java等效于NTOHLL函数
- 什么是等效于Unix函数gmtime_r的Windows
- 当大括号初始值设定项列表中是否有序列点应用于构造函数时
- 外部声明变量的定义适用于一个函数,但不适用于另一个函数
- 否除非依赖于成员函数的否
- cin.getline() 等效于从函数获取字符时
- 等效于 std 函数对象的泛型
- 引用性不依赖于模板函数中的类型