Hi, I am new to both igraph an C/C++. Recently, I found there’s a problem with my code that I cannot print out the vector I want.

```
int main() {
igraph_t graph;
igraph_vector_int_t neis;
// create a graph
igraph_empty(&graph, 6, IGRAPH_UNDIRECTED);
igraph_add_edge(&graph, 0, 1);
igraph_add_edge(&graph, 0, 2);
igraph_add_edge(&graph, 0, 3);
igraph_add_edge(&graph, 1, 4);
igraph_add_edge(&graph, 1, 5);
// get the neighbors of vertex 0
igraph_neighbors(&graph, &neis, 0, IGRAPH_ALL);
// print out the vector
for (int i = 0; i < igraph_vector_size(&neis); i++)
{
printf(" %d ", (int)igraph_vector_e(&neis, i));
}
printf("\n");
igraph_destroy(&graph);
return 0;
}
```

Terminal showed error:

**error C2664: 'igraph_real_t igraph_vector_e(const igraph_vector_t **,igraph_integer_t)’*

I don’t know what I did wrong. How to print out all of the neighbors of vertex 0?

I found another problem. If I type **igraph_neighbors(&graph, &neis, 0, IGRAPH_ALL);** in the code, the terminal would not show errors, but any outcome will disappear.

Like this,

```
int main() {
igraph_t graph;
igraph_vector_int_t neis;
// create a graph
igraph_empty(&graph, 6, IGRAPH_UNDIRECTED);
igraph_add_edge(&graph, 0, 1);
igraph_add_edge(&graph, 0, 2);
igraph_add_edge(&graph, 0, 3);
igraph_add_edge(&graph, 1, 4);
igraph_add_edge(&graph, 1, 5);
// get the neighbors of vertex 0
igraph_neighbors(&graph, &neis, 0, IGRAPH_ALL);
cout<<"Hello"<<endl;
igraph_destroy(&graph);
return 0;
}
```

It will not print Hello in the terminal. However, if I delete **igraph_neighbors(&graph, &neis, 0, IGRAPH_ALL);** there will be **Hello** in terminal.

In C, every data structure will need to be explicitly initialised and freed.

In this case, you need to make sure to first initialise the vector `neis`

by doing

```
igraph_vector_int_init(&neis, 0);
```

The second argument is the length of the vector that is allocated. The actual length of the vector does not matter much, since the `igraph_neighbours`

function will properly resize the vector as needed. However, it does require the vector data structure to be initialised before use.

After use, you can destroy the vector using ` igraph_vector_int_destroy()`

.

You may want to take a closer look at the tutorial.

1 Like

Thank you! My second problem was solved. But the first problem still exists.

I cannot print out all of the neighbors of vertex 0 with the code below

```
for (int i = 0; i < igraph_vector_size(&neis); i++)
{
printf(" %d ", (int)igraph_vector_e(&neis, i));
}
printf("\n");
```

What’s wrong with my code?

Note that the type is `igraph_vector_int_t`

not `igraph_vector_t`

(note the `int`

). Hence, you should use `igraph_vector_int_size`

and `igraph_vector_int_e`

.

Note that `igraph_vector_int_e`

is deprecated, and that it is replaced by `igraph_vector_int_get`

. However, in most cases, you should use `VECTOR(neis)[i]`

instead of `igraph_vector_int_get(&neis, i)`

. Note that you use `neis`

when using `VECTOR`

, *not* `&neis`

. You can read more about this in the tutorial.

Thank you! That really helps a lot!