gpt4 book ai didi

如果通过指针分配,c++ vector.size() 不会更新

转载 作者:太空宇宙 更新时间:2023-11-04 15:03:03 24 4
gpt4 key购买 nike

只是想知道,当使用指针更新 vector 时,有什么方法可以更新 size() 吗?考虑以下代码

std::vector<int> test;
test.reserve(5);
int* pt = test.data();
for (int i = 0; i < 5; ++i) {
pt[i] = i;
}
for (int i = 0; i < 5; ++i) {
printf("%d ? %d\n", pt[i], test[i]);
}
printf("Size:%zu Capacity:%zu Empty:%u\n", test.size(), test.capacity(), test.empty());
for (auto i : test) {
printf("Nothing:%d\n", i);
}
printf("END\n");

数字 {0,1,2,3,4} 被分配给指针 (pt), vector (test) 占用这些值。输出是

0 ? 0
1 ? 1
2 ? 2
3 ? 3
4 ? 4
Size:0 Capacity:5 Empty:1
END

大小保持为 0 并且 for 循环不产生任何结果。我知道有一些简单的方法可以解决这个问题,比如使用 [] 或 push_back() 分配给实际 vector 。
但是,只是想知道,是否有办法获取/更新正确的 size()??

编辑

也许人们指出使用 resize(),这只能做我想做的事情(抱歉,我在原始帖子中不清楚)。考虑以下因素

std::vector<int> test;
test.resize(10);
int* pt = test.data();
int unknown_size = 5; //This can be any unknown number which is < 10)?
//Long story short, save other space for later.
for (int i = 0; i < unknown_size; ++i) {
pt[i] = i;
}
for (int i = 0; i < 5; ++i) {
printf("%d ? %d\n", pt[i], test[i]);
}
printf("Size:%zu Capacity:%zu Empty:%u\n", test.size(), test.capacity(), test.empty());

现在我们得到 Size:10。但我们只使用了 5/unknown_size 元素。有没有办法得到 .size() == 5?是的,我意识到如果我使用 push_back() 那么它就可以解决所有问题。但是有没有办法用指针来做呢?

最佳答案

您的程序有未定义的行为:使用 resize() 更改 vector 的大小。 reserve() 仅更改容量

关于如果通过指针分配,c++ vector.size() 不会更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26004702/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com