标签: c++

如何在C++中使用数组?

C++从C继承了数组,几乎无处不在.C++提供了易于使用且不易出错的抽象(std::vector<T>自C++ 98和C++ 11std::array<T, n>以来),因此对数组的需求并不像在C中那样频繁出现.但是,当您阅读遗产时代码或与用C编写的库交互,你应该牢牢掌握数组如何工作.

本FAQ分为五个部分:

  1. 类型级别的数组和访问元素
  2. 数组创建和初始化
  3. 赋值和参数传递
  4. 多维数组和指针数组
  5. 使用数组时常见的陷阱

如果您觉得此常见问题解答中缺少重要内容,请写下答案并将其作为附加部分链接到此处.

在下文中,"数组"表示"C数组",而不是类模板std::array.假定了C声明符语法的基本知识.请注意,面对异常,手动使用newdelete如下所示是非常危险的,但这是另一个常见问题解答的主题.

(注意:这是Stack Overflow的C++常见问题解答的一个条目.如果你想批评在这种形式下提供常见问题解答的想法,那么发布所有这些的元数据的发布将是这样做的地方.这个问题在C++聊天室中受到监控,其中FAQ的想法一开始就出现了,所以你的答案很可能被那些提出想法的人阅读.)

c++ arrays pointers c++-faq multidimensional-array

469
推荐指数
5
解决办法
12万
查看次数

你如何清除stringstream变量?

我已经尝试了几件事,

std::stringstream m;
m.empty();
m.clear();
Run Code Online (Sandbox Code Playgroud)

两者都不起作用.

c++ stringstream

464
推荐指数
6
解决办法
36万
查看次数

464
推荐指数
8
解决办法
27万
查看次数

如何通过索引从std :: vector <>中删除元素?

我有一个std :: vector <int>,我想删除第n个元素.我怎么做?

std::vector<int> vec;

vec.push_back(6);
vec.push_back(-17);
vec.push_back(12);

vec.erase(???);
Run Code Online (Sandbox Code Playgroud)

c++ stl vector erase

464
推荐指数
10
解决办法
69万
查看次数

是否可以编写模板来检查函数的存在?

是否可以编写一个模板来改变行为,具体取决于是否在类上定义了某个成员函数?

这是我想写的一个简单例子:

template<class T>
std::string optionalToString(T* obj)
{
    if (FUNCTION_EXISTS(T->toString))
        return obj->toString();
    else
        return "toString not defined";
}
Run Code Online (Sandbox Code Playgroud)

所以,如果class T已经toString()确定的话,就使用它; 否则,它没有.我不知道怎么做的神奇部分是"FUNCTION_EXISTS"部分.

c++ templates sfinae template-meta-programming

458
推荐指数
20
解决办法
14万
查看次数

为什么在C++头文件中使用#ifndef和#define?

我一直在头文件的开头看到这样的代码:

#ifndef HEADERFILE_H
#define HEADERFILE_H
Run Code Online (Sandbox Code Playgroud)

并在文件的最后是

#endif
Run Code Online (Sandbox Code Playgroud)

这样做的目的是什么?

c c++ c-preprocessor

458
推荐指数
4
解决办法
39万
查看次数

什么是unsigned char?

在C/C++中,unsigned char用于什么?它与常规有什么不同char

c c++ char

456
推荐指数
13
解决办法
55万
查看次数

模板中关键字'typename'和'class'的区别?

对于模板,我看到了两个声明:

template < typename T >
template < class T >
Run Code Online (Sandbox Code Playgroud)

有什么不同?

这些关键字在下面的例子中究竟是什么意思(取自德国维基百科关于模板的文章)?

template < template < typename, typename > class Container, typename Type >
class Example
{
     Container< Type, std::allocator < Type > > baz;
};
Run Code Online (Sandbox Code Playgroud)

c++ templates keyword

456
推荐指数
6
解决办法
13万
查看次数

对std :: vector的迭代:unsigned vs signed index变量

在C++中迭代向量的正确方法是什么?

考虑这两个代码片段,这个工作正常:

for (unsigned i=0; i < polygon.size(); i++) {
    sum += polygon[i];
}
Run Code Online (Sandbox Code Playgroud)

还有这个:

for (int i=0; i < polygon.size(); i++) {
    sum += polygon[i];
}
Run Code Online (Sandbox Code Playgroud)

产生warning: comparison between signed and unsigned integer expressions.

我是C++世界的新手,所以unsigned变量对我来说有点可怕,我知道unsigned如果使用不正确,变量会很危险,所以 - 这是正确的吗?

c++ unsigned signed stl

452
推荐指数
10
解决办法
75万
查看次数

如何替换字符串中出现的所有字符?

将所有出现的角色替换为另一个角色的有效方法是什么std::string

c++ algorithm stdstring str-replace

450
推荐指数
7
解决办法
46万
查看次数