gpt4 book ai didi

C++ 结构行为

转载 作者:太空狗 更新时间:2023-10-29 20:02:10 26 4
gpt4 key购买 nike

我正在努力提高我对 C++ 语言的了解,正在制作一堆堆栈。下面是我的问题的一个非常简短的例子:为什么我必须直接访问结构的成员才能更改它们而不是使用函数来做到这一点?如果有人知道为什么会发生这种情况,我们将不胜感激!谢谢

#include <iostream>
#include <vector>
using namespace std;

struct Stack {
int N;
vector<int> stack;

int len() { return stack.size(); }

void add(int N) { stack.push_back(N); }
};

struct Stacks {
vector<Stack> stacks;

Stack getStackAtIndex(int i) { return stacks[i]; }

void addStack(Stack stack) { stacks.push_back(stack); }

void printStacks() {
cout << "Printing stacks" << endl;

for (int i = 0; i < stacks.size(); i++) {
cout << "Stack #" << i << ": ";
for (int j = 0; j < stacks[i].len(); j++) {
cout << stacks[i].stack[j];
if (j != stacks[i].len()-1) cout << " -> ";
}
cout << endl;
}
}
};

int main() {

Stacks stacks;
Stack stack;
stack.add(1);
stacks.addStack(stack);

// This does not work:
// stacks.getStackAtIndex(0).add(2);

// This works:
stacks.stacks[0].stack.push_back(2);

stacks.printStacks();

return 0;
}

最佳答案

stacks.getStackAtIndex(0)

返回第一个Stack的拷贝,而

stacks.stacks[0]

返回对它的引用。 (参见 std::vector::operator[])。

您可以通过将 getStackAtIndex 的返回类型更改为 Stack 的引用来解决此问题:

Stack& getStackAtIndex(int i) {
return stacks[i];
}

关于C++ 结构行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45380966/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com