当我们在 Visual Studio IDE 中执行 string::begin() 时,它会返回一个指向字符串中第一个字符的迭代器。但是,当我们在立即窗口(或观察窗口)中键入 string::begin() 时,它返回整个字符串。为什么会这样?立即窗口不应该以这种方式运行,因为 string::begin() 返回一个迭代器,而不是一个字符串。
以下是 Visual Studio IDE 中的代码:
int main()
{
string s = "abc";
string::iterator it = s.begin();
cout << *it << endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
以下是输出:
但是,如果我们在立即窗口中输入 s.begin() ,我们会得到以下输出:
s.begin()
"abc"
[ptr]: 0x0133fd08 "abc"
[Raw View]: {...}
Run Code Online (Sandbox Code Playgroud)
s.begin() 在立即窗口中的结果应该是: 它应该输出一个指向字符串中第一个元素的迭代器(即它应该输出一个指向'a'的迭代器)。但是 s.begin() 在立即窗口中输出整个字符串。为什么会这样?
我有以下 main() 程序 -
int main()
{
vector<vector<vector<int> > > vec;
vector<vector<int> > vv;
vector<int> ve;
//fill vectors
for (int i = 0; i < 5; i++)
{
//vector<vector<int> > vv;
for (int j = 0; j < 10; j++)
{
//vector<int> ve;
for (int t = 0; t < 3; t++)
{
ve.push_back(t);
}
vv.push_back(ve);
}
vec.push_back(vv);
}
for (vector<vector<vector<int> > >::iterator it = vec.begin(); it != vec.end(); it++)
{
for (vector<vector<int> >::iterator it2 = vv.begin(); it2 != vv.end(); …Run Code Online (Sandbox Code Playgroud) 我注意到一些非常奇怪的事情。在下面的代码片段中,控制台输出的结果总是0
int result = 0;
for(int i = 1; i < 4; i++)
{
result *= 10 + i;
}
Console.WriteLine(result);
Run Code Online (Sandbox Code Playgroud)
它看起来result *= 10 + i;总是10与result(where resultis 0)相乘而不是相加i。
如果我只改变乘法线...
int result = 0;
for(int i = 1; i < 4; i++)
{
result = result * 10 + i;
}
Console.WriteLine(result);
Run Code Online (Sandbox Code Playgroud)
这会result在控制台上输出正确的 - 即123.
我的问题是,为什么result *= 10 + i;不能正常工作 - 并且总是给出resultas …
我在 C++ 中有一个类数组。我是这样定义的:
Student* pliststudent = new Student[2]{ 3,5 };
Run Code Online (Sandbox Code Playgroud)
我知道当我们将类数组分配给Student* pliststudent.
如果不对其进行硬编码,就很难提取类数组的长度。
我实现了代码,因此它不是硬编码的(使用友元函数)。但我认为,必须存在更好的解决方案。
以下是我的完整代码:
Student* pliststudent = new Student[2]{ 3,5 };
Run Code Online (Sandbox Code Playgroud)
有没有更好的解决方案?我不想硬编码 Student 类数组的大小。