gpt4 book ai didi

c++ - 如何正确使用vector.data()?

转载 作者:行者123 更新时间:2023-12-02 01:24:57 24 4
gpt4 key购买 nike

vector.data()应该返回一个指向第一个元素的指针,但是当我在 vector<uint8_t> 上使用它时,它以某种方式返回其他东西:

int main() {
std::string myString = {"a b c all the way long"};
std::vector<uint8_t> myVec(myString.begin(), myString.end());
std::cout << myVec.data() << std::endl;

std::vector<int> anotherVec = {4,5,2,3};
std::cout<< anotherVec.data() << std::endl;

return 0;
}

程序打印:

a b c all the way long
0x124bf00

为什么第一个打印显示所有 vector ,而第二个打印显示指针?我期望两者都打印一个指针。

真正的问题是在另一个大程序上,当我打印 vector<uint8_t>.data() 时与 cout ,它在后面打印垃圾(当我在调试器中查看它时,我没有看到垃圾)。

最佳答案

data() 函数返回指向第一个元素的指针。

myStringuint8_t 的 vector 值,所以data()将返回 uint8_t* 类型的值。 uint8_t是基于 char 的类型,所以<<流输出运算符会将其视为以空结尾的字符串。这里的问题是myVec不包含以 null 结尾的字符串,因此这在技术上是未定义的行为

对于anotherVec ,这是 int 的 vector 值,这意味着 data()返回 int* 类型的值,对于 << 没有特定的重载流输出运算符。相反,它使用最接近的可能重载,即打印 void* 类型的通用指针的重载。 .

如果您希望第一个打印指针本身,那么您需要将指针显式转换为 void* :

std::cout << static_cast<void*>(myVec.data()) << '\n';

关于c++ - 如何正确使用vector<uint8_t>.data()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74936471/

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