В C ++ я передаю вектор объектов «Node» по ссылке на функцию addUnique, которая либо увеличивает свойство «count» элемента в векторе, либо присоединяется к вектору.

const char inputString[] = "aaccgtgacac";

int main(int argc, const char * argv[]) {
    std::vector <Node> nodes;
    for (char input: inputString) {
        addUnique(nodes, input);
    }
    
    for (Node node: nodes) {
        node.display();
    }
}
void addUnique(std::vector<Node>& list, char check) {
    for (Node used: list) {
        if (used.baseChar == check) {
            used.count++;
            return;
        }
    }
    Node node(check, 1);
    list.push_back(node);
}
class Node {
public:
    char baseChar;
    Node* composition1;
    Node* composition2;
    unsigned int count;
    
    Node(char newChar, unsigned int newCount) {
        baseChar = newChar;
        count = newCount;
    }
    void display();
};

Затем функция main выводит возвращенные значения cont с соответствующими значениями charValues:

c++
0
DesmosArtist 9 Апр 2021 в 08:24

1 ответ

Лучший ответ

Ваш цикл for, в котором вы увеличиваете счетчик, повторяет Node по значению.

for (Node used: list) { ... }

Это создает копию каждого узла, затем вы изменяете копию и выбрасываете ее. Вместо этого заставьте цикл использовать ссылки.

for (Node& used: list) { ... }

Теперь вы измените значения в векторе, а не в копии.

0
super 9 Апр 2021 в 05:28