按值传递char数组

时间:2013-08-05 13:30:40

标签: c++ c++11

我有一个问题,即按值将char数组传递给priority_queue。我想将唯一值传递给构造函数,但我只能将优先级队列中的类型分配给char*。这会导致问题,因为传递的值会更改算法中的每次迭代,然后会更改优先级队列中的所有值(因为每个元素都是指向任务的指针)。这是一个代码示例:

 char task[100];
 char priority;
 pair<int, char*> temp;
 priority_queue< int, vector<pair<int, char*>>, compare> queue;
 printf("Define a priority and a task to be done (exit by pressing CTRL-D):\n\n");
 do {
    priority=getchar();
    if(isdigit(priority)){
      scanf("%s", task);
      temp=make_pair(atoi(&priority), task); //I want to pass by value here not by reference, is there any solution to this?
      queue.push(temp);
      printf("%i %s\n", temp.first, temp.second);
    }
 } while(priority != EOF);

有没有办法可以为优先级队列的每个元素分配一个唯一的字符串?

2 个答案:

答案 0 :(得分:2)

正如对问题的评论建议您可以将char [100]int包装到新类型(因为pair<>提供了不良的抽象)。 另一种选择是使用std::stringstd::vector<char>std::array<char, 100>代替char [100]。

PS:对atoi(&priority)的调用可能会失败,因为atoi期望以空字符结尾的C字符串,而不是指向单个字符的指针。

答案 1 :(得分:0)

我猜你可以使用像std::array<char,100>这样的东西,但你当前的矢量类型需要一个动态分配的字符串。

你想强制你的矢量的每个元素都超过100个字节,不管字符串多长吗?