.push_back和->push_back的区别
时间: 2024-10-19 12:17:50 浏览: 32
`.push_back` 和 `->push_back` 都是用来向容器(如std::vector)添加元素的成员函数,但在使用上有些区别:
1. `.push_back`:这是普通类的对象直接使用的成员函数,例如,如果你有一个名为`myVector`的std::vector实例,你可以像这样操作:
```
myVector.push_back(element);
```
这表示这个操作是在当前类实例上下文中进行的。
2. `->push_back`:当你有一个指向指针的指针,指向某个包含`push_back`方法的对象时,你会使用箭头运算符(->)来访问这个方法。比如:
```
(*pointer).push_back(element);
```
这里的`pointer`是一个指向std::vector类型的指针,通过解引用后调用`push_back`。
简而言之,`.push_back`是针对非指针的对象,而`->push_back`则是对指针对象的操作。注意,在处理动态分配的内存时,通常会使用`->`来避免潜在的悬垂指针问题。
相关问题
void Convert_32Bits_To_8Bits(vector<uint8_t>& Des,uint32_t nNum) { Des.push_back(nNum >> 0); Des.push_back(nNum >> 1*8); Des.push_back(nNum >> 2*8); Des.push_back(nNum >> 3*8); } 怎么用?
这是一个将32位整数转换为4个8位整数的函数,可以按照以下步骤使用它:
1. 创建一个空的vector<uint8_t>,存储转换后的8位整数。
2. 调用函数Convert_32Bits_To_8Bits,并将第一个参数设置为上一步创建的vector,将第二个参数设置为要转换的32位整数。
3. 最终,vector中将包含4个8位整数,分别对应32位整数的4个字节。
示例代码如下:
```
vector<uint8_t> result;
uint32_t num = 0xABCD1234;
Convert_32Bits_To_8Bits(result, num);
// 打印转换后的8位整数
for (int i = 0; i < result.size(); i++) {
cout << hex << setw(2) << setfill('0') << (int)result[i] << " ";
}
// 输出:34 12 CD AB
```
这个函数能够将uint32_t 类型的数据转为vector<uint8_t>,是否正确,void Convert_32Bits_To_8Bits(vector<uint8_t>& Des,uint32_t nNum) { Des.push_back(nNum >> 0); Des.push_back(nNum >> 18); Des.push_back(nNum >> 28); Des.push_back(nNum >> 3*8); }
这个函数是不正确的。它将32位的数据分为4个部分,每个部分只取了部分位数,然后将它们分别存储在了vector中。但是这样存储的顺序是错误的,应该是按照从低位到高位的顺序存储。同时,这个函数只能处理32位的数据,而不能处理其他位数的数据。正确的实现应该是:
```
void Convert_32Bits_To_8Bits(vector<uint8_t>& Des,uint32_t nNum) {
Des.push_back(nNum & 0xFF);
Des.push_back((nNum >> 8) & 0xFF);
Des.push_back((nNum >> 16) & 0xFF);
Des.push_back((nNum >> 24) & 0xFF);
}
```
这个函数将32位的数据按照从低位到高位的顺序,分为4个部分,每个部分都取了8位,并且将它们存储在vector中。这个函数可以处理任何32位的数据。
阅读全文