Iterating over a vector containing pointers in c++

iterating through a vector of pointers c++
iterate through 2d vector c++
iterate through vector c++
iterate through vector in c++
c++ iterate over vector of pairs
iterate over vector of unique_ptr
iterate through vector of structs c
c++ loop through elements of vector

I got a function that accepts a pointer to a rapidjson::Value type and stores the item at that location into a rapidjson::Value of type kArrayType.

void addBlock(rapidjson::Value* block) {
    blocksArray.PushBack(*block, allocator);
}

This function works as expected.

To extend this I want to add a function that can take a vector of these pointers as an input. I tried this doing:

void addBlocks(std::vector<rapidjson::Value*> blocks) {
    for (const rapidjson::Value& block : blocks) {
        blocksArray.PushBack(*block, allocator);
    }
}

This does not work however. It gives me two red waves in Visual Studio.

The first one beneath block in the parameter declaration of the function, saying:

C++ no suitable constructor exists to convert from to...

And the second one beneath the * in the call to PushBack(), saying:

C++ no operator matches these operands operand types are: * const rapidjson::Value

My guess is that I am doing something very basic wrong that I am just missing.


You can use auto keyword to iterate on blocks vector:

for (auto block : blocks) { 
   ... 
}

Iterating through a vector of pointers and printing out values?, Well, if you're using C++11, then you're lucky. for (const auto& str: firstname_list) std::cout << *str << std::endl;. Otherwise: An iterator is more restricted, e.g., a vector::iterator can only refer to doubles that are inside a vector container. We can delete a pointer using delete: Since an iterator refers to objects in a container, unlike pointers, there’s no concept of delete for an iterator. (The container is responsible for memory management.)


It seems you are doing a copy, so why not use some std algorithm?

void addBlocks(std::vector<rapidjson::Value*> blocks) {
    std::transform(
        blocks.begin(),
        blocks.end(),
        std::back_inserter(blocksArray),
        [](rapidjson::Value* ptr){ return *ptr; });
}

Iterating through a Vector of Pointers - C++ Forum, Hey guys, If I have a Vector of pointers, how can I iterate through that vector, to access the name function of each object in the vector? An iterator is an object (like a pointer) that points to an element inside the container.We can use iterators to move through the contents of the container. They can be visualized as something similar to a pointer pointing to some location and we can access the content at that particular location using them.


Your vector contains pointers. Those cannot be automatically converted to references. The loop variable needs to be a reference of a pointer:

for (rapidjson::Value *& block : blocks)
{
     blocksArray.PushBack(*block, allocator);
}

Quite sure this is what "auto" would do under the hood (if the compiler doesn't entirely optimize it away).

Not sure it would allow you to keep the "const". It didn't when I tried this with ints.

Difference between Iterators and Pointers in C/C++ with Examples , Difference between Iterators and Pointers in C/C++ with Examples (such as an array or a container), has the ability to iterate through the� Since C++11 the cbegin() and cend() methods allow you to obtain a constant iterator for a vector, even if the vector is non-const. A constant iterator allows you to read but not modify the contents of the vector which is useful to enforce const correctness:


Introduction to Iterators in C++, The most obvious form of an iterator is a pointer. A pointer can point to elements in an array and can iterate through them using the increment operator (++). Declare a vector of pointers like this: vector<MyClass*> vec; The important thing to remember is that a vector stores values without regard for what those values represent. It, therefore, doesn’t know that it’s supposed to delete pointer values when it’s destroyed. If you allocate memory, then put pointers to that


C++, Range based for for(const auto& value: v) { std::cout << value << "\n"; } // Using a for loop with iterator for(auto it = std::begin(v); it != std::end(v); ++it) { std::cout� Beware that you do not need the vector to be a global in order to return the iterator/pointer, but that operations in the vector can invalidate the iterator. Adding elements to the vector, for example, can move the vector elements to a different position if the new size() is greater than the reserved memory. Deletion of an element before the


How to iterate through a vector of objects c++, std::vector::cend(). Mutable iterators work like pointers but they are more sophisticated and safer than that. Dereferencing an iterator yields the object contained,� In C++11 you want to iterate over a smart pointer (auto_ptr, shared_ptr, …). collection, say a std::vector, using the new for loop syntax. Let’s try it out: using namespace std; shared_ptr<vector<int> > smartptr(/* A ptr to your vector */); for(int s : smartptr) { /* do something useful */ }