c++;为函数返回的变量创建递增名称 我在C++中添加了一个节点结构来实现图形结构。例如: auto n1 = g.node_insert("1");

c++;为函数返回的变量创建递增名称 我在C++中添加了一个节点结构来实现图形结构。例如: auto n1 = g.node_insert("1");,c++,C++,节点的名称为“1”,它返回一个迭代器n1 我想在调用函数时向图中添加节点。但是要根据计数器增加节点和返回迭代器的名称。例如n1,1…n2,2…n3,3 我的问题是如何在函数中构造迭代器的名称,以使名称n1、n2、n3等 我已经尝试过了,但是有一个冲突的声明“auto node”错误 int counter = 0; void function() { /*add node to the graph*/ counter++; std::string node = "n" + std::to_s

节点的名称为“1”,它返回一个迭代器
n1

我想在调用函数时向图中添加节点。但是要根据计数器增加节点和返回迭代器的名称。例如n1,1…n2,2…n3,3

我的问题是如何在函数中构造迭代器的名称,以使名称n1、n2、n3等

我已经尝试过了,但是有一个冲突的声明“auto node”错误

int counter = 0;

void function() {

/*add node to the graph*/
counter++;
std::string node = "n" + std::to_string(counter);
auto node = OpListIterator.node_insert(std::to_string(counter));

}

为什么不使用向量来存储迭代器呢

size_t const NUM_NODES = 32;
std::vector<Iterator_type> n(NUM_NODES);
for(size_t i = 0; i < NUM_NODES; i++)
{
    n[i] = OpListIterator.node_insert(std::to_string(i));
}
//then access node i with n[i]
size\t const NUM\u NODES=32;
std::向量n(NUM_节点);
对于(大小i=0;i
但是要根据计数器增加节点和返回迭代器的名称

变量名是在源代码中编写的,在编译时会被丢弃

您无法编写在运行时修改其自身源代码的代码(除非您将源代码与可执行文件一起发布并重新编译—这比您需要的要复杂得多)

例如n1,1…n2,2…n3

为什么不

std::vector<graph::iterator> make_n_nodes(graph &g, unsigned n)
{
    std::vector<graph::iterator> v;
    for (unsigned i = 0; i < n; ++n)
    {
        v.push_back(g.node_insert(i));
    }
    return v;
}
std::向量生成n节点(图&g,无符号n)
{
std::向量v;
for(无符号i=0;i

然后您的节点被“调用”
v[0]…v[n-1]
,节点
v[0]
具有标识符
0

如果您希望它们像那样增加,为什么不简单地使用一个向量来存储迭代器呢?您正在声明一个名为
node
的字符串变量,然后尝试立即删除第二个变量,也称为
node
@Qubit哦,我想你是对的,我需要一个全局向量,不是吗?当函数返回时,
auto node
超出范围。@NathanOliver这不是我从这个问题中读到的内容。OP希望自动生成名为
n1
等的变量-因此尝试构建一个字符串(所需的变量名),然后分配给它,希望该字符串成为一个变量。这在C++中是不起作用的,但是其他语言对于这样的事情有更薄的屏障,这两个基本的区别对于新编程的人来说可能不是很明显。@ PeliChanBrad不像其他语言,你不能从C++中的字符串中“即时”生成变量。但还有其他工具可以帮助您实现目标。一个这样的工具是
向量
,用于保存序列项的集合。与许多单独的变量相比,使用它(例如迭代)更方便。