我遇到的问题是,当我更改对象的属性时,更改不是"保存".更容易向您展示正在发生的事情.
我正在学习c++并决定建立一个小型国际象棋应用程序.每个Piece都是一个单独的对象.
它们存储在std::vector这样的中
std::vector<Piece> pieces;
Run Code Online (Sandbox Code Playgroud)
他们是这样初始化的
for (int i = 0; i < 2; i++)
{
Piece p;
p.Init(i*2+1, 1, renderer, SQUARE_SIZE, "king");
pieces.push_back(p);
}
Run Code Online (Sandbox Code Playgroud)
当我点击鼠标时我想选择所有部分(暂时)
for (int i = 0; i < pieces.size(); i++)
{
Piece p = pieces[i];
p.Select();
}
Run Code Online (Sandbox Code Playgroud)
问题是,在Select()调用函数时,到渲染selected属性的时候是false.奇怪的是,这不会发生在未被包含在内的作品vector中k.
在你问之前我的代码中没有任何地方设置selected为false:)(除了构造函数:P)
此外,如果你想要downvoting,请先给我发表评论然后我会尝试解决它的问题!
这是整个文件.(不确定这是否是插入它们的正确方法)
Piece.h
#include <iostream>
#include <SDL2/SDL.h>
#include <SDL2/SDl_image.h>
#include <array> …Run Code Online (Sandbox Code Playgroud) 以下参考用法有什么问题以及正确的用法是什么.我想为较小尺寸的矢量分配一个参考.
vector<int> R = {3,4,6,3,6,2,3};
vector<int> P = {5,9,8};
if (P.size()>=R.size())
vector<int>& sm = R;
else
vector<int>& sm= P;
Run Code Online (Sandbox Code Playgroud) 我有以下功能(用于测试):
static bool foo(void)
{
std::string name = "name";
std::vector<std::string> test;
std::vector<std::string>::iterator vStart = test.begin();
std::vector<std::string>::iterator vEnd = test.end();
return (std::find(vStart, vEnd, name) == vEnd);
}
Run Code Online (Sandbox Code Playgroud)
我收到编译错误:
/data/src/fiware-orion/src/lib/common/string.cpp: In function 'bool foo()':
/data/src/fiware-orion/src/lib/common/string.cpp:167:39: error: no matching function for call to 'find(std::vector<std::basic_string<char> >::iterator&, std::vector<std::basic_string<char> >::iterator&, std::string&)'
return (std::find(vStart, vEnd, name) == vEnd);
^
/data/src/fiware-orion/src/lib/common/string.cpp:167:39: note: candidate is:
In file included from /usr/include/c++/4.9/bits/locale_facets.h:48:0,
from /usr/include/c++/4.9/bits/basic_ios.h:37,
from /usr/include/c++/4.9/ios:44,
from /usr/include/c++/4.9/istream:38,
from /usr/include/c++/4.9/sstream:38,
from /data/src/fiware-orion/src/lib/common/string.cpp:31:
/usr/include/c++/4.9/bits/streambuf_iterator.h:369:5: note: template<class _CharT2> typename __gnu_cxx::__enable_if<std::__is_char<_CharT2>::__value, std::istreambuf_iterator<_CharT> >::__type std::find(std::istreambuf_iterator<_CharT>, …Run Code Online (Sandbox Code Playgroud) 我想将所有值放入 a 中std::vector true。我写了两种方法:第一个有效,但第二个无效。它告诉我 myproj.exe 已触发断点。你知道问题出在哪里吗?
这个有效:
void first(std::vector<bool>& vect, unsigned int n)
{
for (unsigned int i = 0; i < n; i++)
{
vect.push_back(true);
}
}
Run Code Online (Sandbox Code Playgroud)
这一个不:
void secound(std::vector<bool>& vect, unsigned int n)
{
for(unsigned int i = 0; i < n; i++)
{
vect[i] = true; //crash here
}
}
Run Code Online (Sandbox Code Playgroud) 我有一个类向量,该类有一个字符串名称,以及其他私有字段。
我想实现一个void delete(string name)函数,它根据字符串查找元素(向量中的每个类都有一个唯一的名称)。
但是经过简单的测试,它给了我一个错误“不能增加到最后”。
这是我的功能:
void delete_member(string member_name)
{
int count = 0;
for (auto it = member_list.begin(); it != member_list.end(); ++it, ++count)
if (it->get_name() == member_name)
member_list.erase(member_list.begin() + count);
}
Run Code Online (Sandbox Code Playgroud)
就我搜索的答案而言,似乎迭代器不应该超过向量的 .end() 。
这里的缺陷是什么?我使用相同的循环来迭代 add_member(Member m) 函数的向量,该函数完全正常
这不编译:
vector<int[2]> v;
int p[2] = {1, 2};
v.push_back(p); //< compile error here
Run Code Online (Sandbox Code Playgroud)
什么是替代方案?我不想使用std::array.
std::vector自身的声明编译。这push_back是不编译的。
我在生成整数二进制表示的“简单”函数的输出中看到了奇怪的行为。我打算在另一个代码中使用该函数,但首先希望通过打印到控制台来查看它的工作情况。我首先定义函数 dec2bin 以获取一个数字和所需位串的长度。定义函数返回的向量后,向量将填充所需的二进制值。在主函数中,向量被访问并按元素打印到控制台。但是,除非我在填充 for 循环的向量中包含任意 cout 语句,否则输出是不正确的。
该函数定义如下:
vector<int> dec2bin(int N, int j){
vector<int> myvec;
myvec.push_back(N);
for (int i = N-1; i >= 0; i--) {
int r = j >> i;
if (r & 1)
myvec[N-i-1] = 1;
else
myvec[N-i-1] = 0;
//cout << " ";
}
return myvec;
}
Run Code Online (Sandbox Code Playgroud)
我的主要功能是:
int main(){
int length = 8;
int num = 15;
vector<int> myvec = dec2bin(length,num);
for (int j=0; j<length; j++){cout << myvec[j];}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
当注释掉的行 (cout << " …
我尝试了一些基于范围的 for 循环来了解这个概念,对于整数数组和向量,它工作得很好。但对于字符向量,我的编译器不会给出任何错误消息或所需的结果,只是一行红点。这是我的代码:
\n#include <iostream>\n#include <vector>\nusing namespace std;\nint main(){\n vector<char> myVector {\'a\', \'b\', \'c\', \'d\'};\n myVector.push_back(\'e\');\n for (auto i : myVector){\n cout << myVector[i] << endl;\n }\n return 0;\n}\nRun Code Online (Sandbox Code Playgroud)\n什么\xe2\x80\x99s错了?我找不到任何东西。当我用整数替换字符时,效果很好。
\n我想返回多个值并使用 声明该函数auto。
但这效果并不好。无法正确返回值。它被覆盖了。
我尝试执行以下功能f1〜f3。这些函数应该返回元组中的向量和字符串。但只是f3效果很好。
#include <iostream>
#include <vector>
#include <string>
#include <tuple>
auto f1(){
std::vector<double> v(10, 0);
std::string s = "hello";
return std::forward_as_tuple(v, s);
}
auto f2(){
std::vector<double> v(10, 0);
return std::forward_as_tuple(v, "hello");
}
std::tuple<std::vector<double>, std::string> f3(){
std::vector<double> v(10, 0);
std::string s = "hello";
return std::forward_as_tuple(v, s);
}
int main(void){
//change the function
//auto [vec, str] = f1();
//auto [vec, str] = f2();
auto [vec, str] = f2();
for (auto e : …Run Code Online (Sandbox Code Playgroud) 我创建了一个二维向量,但是当我从这个二维向量指针读取大小时,它得到了错误的大小。我不知道,有人能解释一下吗?
#include <stdio.h>
#include <vector>
void read_size(std::vector<std::vector<float>> *vec)
{
printf("read size %d, %d\n", vec->size(), vec[0].size());
}
int main()
{
std::vector<std::vector<float>> vec;
vec.resize(100);
vec[0].resize(50);
printf("main %d, %d\n", vec.size(), vec[0].size());
read_size(&vec);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
输出是
main 100, 50
read size 100, 100
Run Code Online (Sandbox Code Playgroud)
我认为两个尺寸都应该是 100、50