如何通过向量迭代作为指针
How to iterate through vector passed as pointer
我的问题在下面的代码中注释。
void printVec(std::vector<int> *myVec) {
// How to do such looping not to dereference pointer
for (int i = 0; i < myVec->size(); i++) {
std::cout << myVec->[i] << " ";
}
}
您可以
通过const
参考参考:
void printVec(const std::vector<int>& vec) {
for (const auto& value : vec)
..
}
使用迭代器:
void printVec(td::vector<int>* vec) {
for (auto it = vec->begin(); it != vec->end(); ++it)
..
}
使用at
(绑定检查的性能成本):
vec->at(i);
直接调用operator[]
:
vec->operator[](i);
通过参考:
通过void printVec(std::vector<int> & myVec) {
// How to do such looping not to dereference pointer
for (int i = 0; i < myVec.size(); i++) {
std::cout << myVec[i] << " ";
}
}
也最好将范围用于循环(C 11):
void printVec(std::vector<int> & myVec) {
// How to do such looping not to dereference pointer
for (auto i : myVec) {
std::cout << i << " ";
}
}
您可以将指针转换为参考,然后从那里继续:
void printVec(std::vector<int> *myVec) {
std::vector<int>& vec = *myVec;
// How to do such looping not to dereference pointer
for (size_t i = 0; i < vec->size(); i++) {
std::cout << vec[i] << " ";
}
}
如果我明白,我认为您正在尝试像一系列INT一样传递它,类似这样的事情可能会起作用
#include <iostream>
#include <vector>
void printVec(int* i, int n)
{
for(int j = 0; j < n; j++)
{
std::cout << i[j] << std::endl;
}
}
int main()
{
std::vector<int> a;
a.push_back(5);
a.push_back(4);
a.push_back(3);
a.push_back(2);
a.push_back(1);
a.push_back(0);
printVec(&a[0], a.size());
return 0;
}
相关文章:
- std::vector::迭代器是否可以合法地作为指针
- 不明白迭代器,引用和指针失效,一个例子
- 为什么 vector 的随机访问迭代器给出与指针不同的内存地址?
- 在C++中释放内存期间,迭代器与指针有何不同
- 迭代器的指针操作问题
- 对于随机访问迭代器(矢量迭代器),迭代器C++样式指针吗?
- 专门C++使用指针值类型的通用迭代器的模板函数?
- 从 std::vector 迭代器中执行函数指针
- foor 循环的最后一次迭代中的指针更改
- 使用 map<char,strring> 的迭代器返回指针 map<char,strring>*
- 迭代器是否分配内存(如指针)?
- 如何在C++中重新实现包含指针的 STL 容器的类的迭代器
- 为什么第一次迭代后的指针指向随机值?
- 在指针迭代中使用for循环时出现分段错误
- 将unordered_map元素指向指针/迭代器
- 如何制作指针迭代器
- 如何在C++中存储对 stl 容器元素的指针/迭代器引用
- STL容器迭代器和C指针迭代器之间的区别是什么
- 公开begin()和end()的const和非const版本,以使用智能指针迭代成员向量
- 性能-使用迭代器或指针迭代vector