标签: stdvector

std :: vector中的对象没有正确保存属性

我遇到的问题是,当我更改对象的属性时,更改不是"保存".更容易向您展示正在发生的事情.

我正在学习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.奇怪的是,这不会发生在未被包含在内的作品vectork.

在你问之前我的代码中没有任何地方设置selectedfalse:)(除了构造函数:P)

此外,如果你想要downvoting,请先给我发表评论然后我会尝试解决它的问题!

这是整个文件.(不确定这是否是插入它们的正确方法)

Piece.h

#include <iostream>
#include <SDL2/SDL.h>
#include <SDL2/SDl_image.h>
#include <array> …
Run Code Online (Sandbox Code Playgroud)

c++ class stdvector

-1
推荐指数
1
解决办法
928
查看次数

'sm'未在此范围内声明

以下参考用法有什么问题以及正确的用法是什么.我想为较小尺寸的矢量分配一个参考.

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)

c++ stdvector

-1
推荐指数
1
解决办法
55
查看次数

使用std :: find没有匹配的函数调用错误

我有以下功能(用于测试):

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)

c++ std stdvector

-1
推荐指数
1
解决办法
254
查看次数

用真实值填充向量

我想将所有值放入 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)

c++ vector std stdvector c++11

-1
推荐指数
1
解决办法
1万
查看次数

出现 std::vector 错误:“无法将向量增加到末尾”,同时想要擦除特定元素

我有一个类向量,该类有一个字符串名称,以及其他私有字段。

我想实现一个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) 函数的向量,该函数完全正常

c++ vector stdvector c++11

-1
推荐指数
1
解决办法
123
查看次数

如何 push_back() C 数组到 std::vector

这不编译:

vector<int[2]> v;
int p[2] = {1, 2};
v.push_back(p); //< compile error here
Run Code Online (Sandbox Code Playgroud)

https://godbolt.org/z/Kabq8Y

什么是替代方案?我不想使用std::array.

std::vector自身的声明编译。这push_back是不编译的。

c++ arrays push-back stdvector

-1
推荐指数
1
解决办法
264
查看次数

从函数传递到 main 时,C++ 如何处理向量?

我在生成整数二进制表示的“简单”函数的输出中看到了奇怪的行为。我打算在另一个代码中使用该函数,但首先希望通过打印到控制台来查看它的工作情况。我首先定义函数 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 << " …

c++ cout stdvector c++11

-1
推荐指数
1
解决办法
80
查看次数

为什么我的基于范围的 for 循环适用于某些数据类型,但不适用于其他数据类型?

我尝试了一些基于范围的 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}\n
Run Code Online (Sandbox Code Playgroud)\n

什么\xe2\x80\x99s错了?我找不到任何东西。当我用整数替换字符时,效果很好。

\n

c++ iterator char stdvector range-based-loop

-1
推荐指数
1
解决办法
89
查看次数

编译器错误?在 std::tuple 中返回 std::vector 和 std::string。但我得到了奇怪的价值观

我想返回多个值并使用 声明该函数auto

但这效果并不好。无法正确返回值。它被覆盖了。

我尝试执行以下功能f1f3。这些函数应该返回元组中的向量和字符串。但只是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)

c++ stdvector auto stdtuple c++17

-1
推荐指数
1
解决办法
206
查看次数

从 C++ 中的二维向量指针获取错误的大小

我创建了一个二维向量,但是当我从这个二维向量指针读取大小时,它得到了错误的大小。我不知道,有人能解释一下吗?

#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

c++ stdvector

-1
推荐指数
1
解决办法
63
查看次数

标签 统计

c++ ×10

stdvector ×10

c++11 ×3

std ×2

vector ×2

arrays ×1

auto ×1

c++17 ×1

char ×1

class ×1

cout ×1

iterator ×1

push-back ×1

range-based-loop ×1

stdtuple ×1